ClassChange effect using a small delay.

This commit is contained in:
MobiusDevelopment
2021-10-28 07:18:20 +00:00
parent 7f43985680
commit d0c5cfe4c7
19 changed files with 1017 additions and 922 deletions

View File

@@ -16,6 +16,7 @@
*/ */
package handlers.effecthandlers; package handlers.effecthandlers;
import org.l2jmobius.commons.threads.ThreadPool;
import org.l2jmobius.gameserver.data.xml.SkillData; import org.l2jmobius.gameserver.data.xml.SkillData;
import org.l2jmobius.gameserver.enums.SubclassInfoType; import org.l2jmobius.gameserver.enums.SubclassInfoType;
import org.l2jmobius.gameserver.model.StatSet; import org.l2jmobius.gameserver.model.StatSet;
@@ -61,50 +62,54 @@ public class ClassChange extends AbstractEffect
return; return;
} }
final PlayerInstance player = effected.getActingPlayer(); // Executing later otherwise interrupted exception during storeCharBase.
if (player.isTransformed() || player.isSubclassLocked() || player.isAffectedBySkill(IDENTITY_CRISIS_SKILL_ID)) ThreadPool.schedule(() ->
{ {
player.sendMessage("You cannot switch your class right now!"); final PlayerInstance player = effected.getActingPlayer();
return; if (player.isTransformed() || player.isSubclassLocked() || player.isAffectedBySkill(IDENTITY_CRISIS_SKILL_ID))
}
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())
{ {
// And re-add player.sendMessage("You cannot switch your class right now!");
if (member != player) 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);
} }
} }

View File

@@ -16,6 +16,7 @@
*/ */
package handlers.effecthandlers; package handlers.effecthandlers;
import org.l2jmobius.commons.threads.ThreadPool;
import org.l2jmobius.gameserver.data.xml.SkillData; import org.l2jmobius.gameserver.data.xml.SkillData;
import org.l2jmobius.gameserver.enums.SubclassInfoType; import org.l2jmobius.gameserver.enums.SubclassInfoType;
import org.l2jmobius.gameserver.model.StatSet; import org.l2jmobius.gameserver.model.StatSet;
@@ -61,50 +62,54 @@ public class ClassChange extends AbstractEffect
return; return;
} }
final PlayerInstance player = effected.getActingPlayer(); // Executing later otherwise interrupted exception during storeCharBase.
if (player.isTransformed() || player.isSubclassLocked() || player.isAffectedBySkill(IDENTITY_CRISIS_SKILL_ID)) ThreadPool.schedule(() ->
{ {
player.sendMessage("You cannot switch your class right now!"); final PlayerInstance player = effected.getActingPlayer();
return; if (player.isTransformed() || player.isSubclassLocked() || player.isAffectedBySkill(IDENTITY_CRISIS_SKILL_ID))
}
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())
{ {
// And re-add player.sendMessage("You cannot switch your class right now!");
if (member != player) 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);
} }
} }

View File

@@ -16,6 +16,7 @@
*/ */
package handlers.effecthandlers; package handlers.effecthandlers;
import org.l2jmobius.commons.threads.ThreadPool;
import org.l2jmobius.gameserver.data.xml.SkillData; import org.l2jmobius.gameserver.data.xml.SkillData;
import org.l2jmobius.gameserver.enums.SubclassInfoType; import org.l2jmobius.gameserver.enums.SubclassInfoType;
import org.l2jmobius.gameserver.model.StatSet; import org.l2jmobius.gameserver.model.StatSet;
@@ -61,50 +62,54 @@ public class ClassChange extends AbstractEffect
return; return;
} }
final PlayerInstance player = effected.getActingPlayer(); // Executing later otherwise interrupted exception during storeCharBase.
if (player.isTransformed() || player.isSubclassLocked() || player.isAffectedBySkill(IDENTITY_CRISIS_SKILL_ID)) ThreadPool.schedule(() ->
{ {
player.sendMessage("You cannot switch your class right now!"); final PlayerInstance player = effected.getActingPlayer();
return; if (player.isTransformed() || player.isSubclassLocked() || player.isAffectedBySkill(IDENTITY_CRISIS_SKILL_ID))
}
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())
{ {
// And re-add player.sendMessage("You cannot switch your class right now!");
if (member != player) 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);
} }
} }

View File

@@ -16,6 +16,7 @@
*/ */
package handlers.effecthandlers; package handlers.effecthandlers;
import org.l2jmobius.commons.threads.ThreadPool;
import org.l2jmobius.gameserver.data.xml.SkillData; import org.l2jmobius.gameserver.data.xml.SkillData;
import org.l2jmobius.gameserver.enums.SubclassInfoType; import org.l2jmobius.gameserver.enums.SubclassInfoType;
import org.l2jmobius.gameserver.model.StatSet; import org.l2jmobius.gameserver.model.StatSet;
@@ -61,50 +62,54 @@ public class ClassChange extends AbstractEffect
return; return;
} }
final PlayerInstance player = effected.getActingPlayer(); // Executing later otherwise interrupted exception during storeCharBase.
if (player.isTransformed() || player.isSubclassLocked() || player.isAffectedBySkill(IDENTITY_CRISIS_SKILL_ID)) ThreadPool.schedule(() ->
{ {
player.sendMessage("You cannot switch your class right now!"); final PlayerInstance player = effected.getActingPlayer();
return; if (player.isTransformed() || player.isSubclassLocked() || player.isAffectedBySkill(IDENTITY_CRISIS_SKILL_ID))
}
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())
{ {
// And re-add player.sendMessage("You cannot switch your class right now!");
if (member != player) 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);
} }
} }

View File

@@ -16,6 +16,7 @@
*/ */
package handlers.effecthandlers; package handlers.effecthandlers;
import org.l2jmobius.commons.threads.ThreadPool;
import org.l2jmobius.gameserver.data.xml.SkillData; import org.l2jmobius.gameserver.data.xml.SkillData;
import org.l2jmobius.gameserver.enums.SubclassInfoType; import org.l2jmobius.gameserver.enums.SubclassInfoType;
import org.l2jmobius.gameserver.model.StatSet; import org.l2jmobius.gameserver.model.StatSet;
@@ -61,50 +62,54 @@ public class ClassChange extends AbstractEffect
return; return;
} }
final PlayerInstance player = effected.getActingPlayer(); // Executing later otherwise interrupted exception during storeCharBase.
if (player.isTransformed() || player.isSubclassLocked() || player.isAffectedBySkill(IDENTITY_CRISIS_SKILL_ID)) ThreadPool.schedule(() ->
{ {
player.sendMessage("You cannot switch your class right now!"); final PlayerInstance player = effected.getActingPlayer();
return; if (player.isTransformed() || player.isSubclassLocked() || player.isAffectedBySkill(IDENTITY_CRISIS_SKILL_ID))
}
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())
{ {
// And re-add player.sendMessage("You cannot switch your class right now!");
if (member != player) 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);
} }
} }

View File

@@ -16,6 +16,7 @@
*/ */
package handlers.effecthandlers; package handlers.effecthandlers;
import org.l2jmobius.commons.threads.ThreadPool;
import org.l2jmobius.gameserver.data.xml.SkillData; import org.l2jmobius.gameserver.data.xml.SkillData;
import org.l2jmobius.gameserver.enums.SubclassInfoType; import org.l2jmobius.gameserver.enums.SubclassInfoType;
import org.l2jmobius.gameserver.model.StatSet; import org.l2jmobius.gameserver.model.StatSet;
@@ -61,50 +62,54 @@ public class ClassChange extends AbstractEffect
return; return;
} }
final PlayerInstance player = effected.getActingPlayer(); // Executing later otherwise interrupted exception during storeCharBase.
if (player.isTransformed() || player.isSubclassLocked() || player.isAffectedBySkill(IDENTITY_CRISIS_SKILL_ID)) ThreadPool.schedule(() ->
{ {
player.sendMessage("You cannot switch your class right now!"); final PlayerInstance player = effected.getActingPlayer();
return; if (player.isTransformed() || player.isSubclassLocked() || player.isAffectedBySkill(IDENTITY_CRISIS_SKILL_ID))
}
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())
{ {
// And re-add player.sendMessage("You cannot switch your class right now!");
if (member != player) 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);
} }
} }

View File

@@ -16,6 +16,7 @@
*/ */
package handlers.effecthandlers; package handlers.effecthandlers;
import org.l2jmobius.commons.threads.ThreadPool;
import org.l2jmobius.gameserver.data.xml.SkillData; import org.l2jmobius.gameserver.data.xml.SkillData;
import org.l2jmobius.gameserver.enums.SubclassInfoType; import org.l2jmobius.gameserver.enums.SubclassInfoType;
import org.l2jmobius.gameserver.model.StatSet; import org.l2jmobius.gameserver.model.StatSet;
@@ -61,50 +62,54 @@ public class ClassChange extends AbstractEffect
return; return;
} }
final PlayerInstance player = effected.getActingPlayer(); // Executing later otherwise interrupted exception during storeCharBase.
if (player.isTransformed() || player.isSubclassLocked() || player.isAffectedBySkill(IDENTITY_CRISIS_SKILL_ID)) ThreadPool.schedule(() ->
{ {
player.sendMessage("You cannot switch your class right now!"); final PlayerInstance player = effected.getActingPlayer();
return; if (player.isTransformed() || player.isSubclassLocked() || player.isAffectedBySkill(IDENTITY_CRISIS_SKILL_ID))
}
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())
{ {
// And re-add player.sendMessage("You cannot switch your class right now!");
if (member != player) 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);
} }
} }

View File

@@ -16,6 +16,7 @@
*/ */
package handlers.effecthandlers; package handlers.effecthandlers;
import org.l2jmobius.commons.threads.ThreadPool;
import org.l2jmobius.gameserver.data.xml.SkillData; import org.l2jmobius.gameserver.data.xml.SkillData;
import org.l2jmobius.gameserver.enums.SubclassInfoType; import org.l2jmobius.gameserver.enums.SubclassInfoType;
import org.l2jmobius.gameserver.model.Shortcut; import org.l2jmobius.gameserver.model.Shortcut;
@@ -63,93 +64,97 @@ public class ClassChange extends AbstractEffect
return; return;
} }
final PlayerInstance player = effected.getActingPlayer(); // Executing later otherwise interrupted exception during storeCharBase.
if (player.isTransformed() || player.isSubclassLocked() || player.isAffectedBySkill(IDENTITY_CRISIS_SKILL_ID)) ThreadPool.schedule(() ->
{ {
player.sendMessage("You cannot switch your class right now!"); final PlayerInstance player = effected.getActingPlayer();
return; if (player.isTransformed() || player.isSubclassLocked() || player.isAffectedBySkill(IDENTITY_CRISIS_SKILL_ID))
}
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())
{ {
// And re-add player.sendMessage("You cannot switch your class right now!");
if (member != player) return;
{
member.sendPacket(new PartySmallWindowAll(member, player.getParty()));
}
}
}
// Stop auto use.
for (Shortcut shortcut : player.getAllShortCuts())
{
if (!shortcut.isAutoUse())
{
continue;
} }
player.removeAutoShortcut(shortcut.getSlot(), shortcut.getPage()); final Skill identityCrisis = SkillData.getInstance().getSkill(IDENTITY_CRISIS_SKILL_ID, 1);
if (identityCrisis != null)
if (player.getAutoUseSettings().isAutoSkill(shortcut.getId()))
{ {
final Skill knownSkill = player.getKnownSkill(shortcut.getId()); identityCrisis.applyEffects(player, player);
if (knownSkill != null) }
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())
{ {
if (knownSkill.isBad()) // And re-add
if (member != player)
{ {
AutoUseTaskManager.getInstance().removeAutoSkill(player, shortcut.getId()); member.sendPacket(new PartySmallWindowAll(member, player.getParty()));
}
else
{
AutoUseTaskManager.getInstance().removeAutoBuff(player, shortcut.getId());
} }
} }
} }
else
// Stop auto use.
for (Shortcut shortcut : player.getAllShortCuts())
{ {
final ItemInstance knownItem = player.getInventory().getItemByObjectId(shortcut.getId()); if (!shortcut.isAutoUse())
if (knownItem != null)
{ {
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);
} }
} }

View File

@@ -16,6 +16,7 @@
*/ */
package handlers.effecthandlers; package handlers.effecthandlers;
import org.l2jmobius.commons.threads.ThreadPool;
import org.l2jmobius.gameserver.data.xml.SkillData; import org.l2jmobius.gameserver.data.xml.SkillData;
import org.l2jmobius.gameserver.enums.SubclassInfoType; import org.l2jmobius.gameserver.enums.SubclassInfoType;
import org.l2jmobius.gameserver.model.Shortcut; import org.l2jmobius.gameserver.model.Shortcut;
@@ -63,93 +64,97 @@ public class ClassChange extends AbstractEffect
return; return;
} }
final PlayerInstance player = effected.getActingPlayer(); // Executing later otherwise interrupted exception during storeCharBase.
if (player.isTransformed() || player.isSubclassLocked() || player.isAffectedBySkill(IDENTITY_CRISIS_SKILL_ID)) ThreadPool.schedule(() ->
{ {
player.sendMessage("You cannot switch your class right now!"); final PlayerInstance player = effected.getActingPlayer();
return; if (player.isTransformed() || player.isSubclassLocked() || player.isAffectedBySkill(IDENTITY_CRISIS_SKILL_ID))
}
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())
{ {
// And re-add player.sendMessage("You cannot switch your class right now!");
if (member != player) return;
{
member.sendPacket(new PartySmallWindowAll(member, player.getParty()));
}
}
}
// Stop auto use.
for (Shortcut shortcut : player.getAllShortCuts())
{
if (!shortcut.isAutoUse())
{
continue;
} }
player.removeAutoShortcut(shortcut.getSlot(), shortcut.getPage()); final Skill identityCrisis = SkillData.getInstance().getSkill(IDENTITY_CRISIS_SKILL_ID, 1);
if (identityCrisis != null)
if (player.getAutoUseSettings().isAutoSkill(shortcut.getId()))
{ {
final Skill knownSkill = player.getKnownSkill(shortcut.getId()); identityCrisis.applyEffects(player, player);
if (knownSkill != null) }
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())
{ {
if (knownSkill.isBad()) // And re-add
if (member != player)
{ {
AutoUseTaskManager.getInstance().removeAutoSkill(player, shortcut.getId()); member.sendPacket(new PartySmallWindowAll(member, player.getParty()));
}
else
{
AutoUseTaskManager.getInstance().removeAutoBuff(player, shortcut.getId());
} }
} }
} }
else
// Stop auto use.
for (Shortcut shortcut : player.getAllShortCuts())
{ {
final ItemInstance knownItem = player.getInventory().getItemByObjectId(shortcut.getId()); if (!shortcut.isAutoUse())
if (knownItem != null)
{ {
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);
} }
} }

View File

@@ -16,6 +16,7 @@
*/ */
package handlers.effecthandlers; package handlers.effecthandlers;
import org.l2jmobius.commons.threads.ThreadPool;
import org.l2jmobius.gameserver.data.xml.SkillData; import org.l2jmobius.gameserver.data.xml.SkillData;
import org.l2jmobius.gameserver.enums.SubclassInfoType; import org.l2jmobius.gameserver.enums.SubclassInfoType;
import org.l2jmobius.gameserver.model.Shortcut; import org.l2jmobius.gameserver.model.Shortcut;
@@ -63,93 +64,97 @@ public class ClassChange extends AbstractEffect
return; return;
} }
final PlayerInstance player = effected.getActingPlayer(); // Executing later otherwise interrupted exception during storeCharBase.
if (player.isTransformed() || player.isSubclassLocked() || player.isAffectedBySkill(IDENTITY_CRISIS_SKILL_ID)) ThreadPool.schedule(() ->
{ {
player.sendMessage("You cannot switch your class right now!"); final PlayerInstance player = effected.getActingPlayer();
return; if (player.isTransformed() || player.isSubclassLocked() || player.isAffectedBySkill(IDENTITY_CRISIS_SKILL_ID))
}
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())
{ {
// And re-add player.sendMessage("You cannot switch your class right now!");
if (member != player) return;
{
member.sendPacket(new PartySmallWindowAll(member, player.getParty()));
}
}
}
// Stop auto use.
for (Shortcut shortcut : player.getAllShortCuts())
{
if (!shortcut.isAutoUse())
{
continue;
} }
player.removeAutoShortcut(shortcut.getSlot(), shortcut.getPage()); final Skill identityCrisis = SkillData.getInstance().getSkill(IDENTITY_CRISIS_SKILL_ID, 1);
if (identityCrisis != null)
if (player.getAutoUseSettings().isAutoSkill(shortcut.getId()))
{ {
final Skill knownSkill = player.getKnownSkill(shortcut.getId()); identityCrisis.applyEffects(player, player);
if (knownSkill != null) }
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())
{ {
if (knownSkill.isBad()) // And re-add
if (member != player)
{ {
AutoUseTaskManager.getInstance().removeAutoSkill(player, shortcut.getId()); member.sendPacket(new PartySmallWindowAll(member, player.getParty()));
}
else
{
AutoUseTaskManager.getInstance().removeAutoBuff(player, shortcut.getId());
} }
} }
} }
else
// Stop auto use.
for (Shortcut shortcut : player.getAllShortCuts())
{ {
final ItemInstance knownItem = player.getInventory().getItemByObjectId(shortcut.getId()); if (!shortcut.isAutoUse())
if (knownItem != null)
{ {
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);
} }
} }

View File

@@ -16,6 +16,7 @@
*/ */
package handlers.effecthandlers; package handlers.effecthandlers;
import org.l2jmobius.commons.threads.ThreadPool;
import org.l2jmobius.gameserver.data.xml.SkillData; import org.l2jmobius.gameserver.data.xml.SkillData;
import org.l2jmobius.gameserver.enums.SubclassInfoType; import org.l2jmobius.gameserver.enums.SubclassInfoType;
import org.l2jmobius.gameserver.model.StatSet; import org.l2jmobius.gameserver.model.StatSet;
@@ -60,49 +61,53 @@ public class ClassChange extends AbstractEffect
return; return;
} }
final PlayerInstance player = effected.getActingPlayer(); // Executing later otherwise interrupted exception during storeCharBase.
if (player.isTransformed() || player.isSubclassLocked() || player.isAffectedBySkill(IDENTITY_CRISIS_SKILL_ID)) ThreadPool.schedule(() ->
{ {
player.sendMessage("You cannot switch your class right now!"); final PlayerInstance player = effected.getActingPlayer();
return; if (player.isTransformed() || player.isSubclassLocked() || player.isAffectedBySkill(IDENTITY_CRISIS_SKILL_ID))
}
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())
{ {
// And re-add player.sendMessage("You cannot switch your class right now!");
if (member != player) 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);
} }
} }

View File

@@ -16,6 +16,7 @@
*/ */
package handlers.effecthandlers; package handlers.effecthandlers;
import org.l2jmobius.commons.threads.ThreadPool;
import org.l2jmobius.gameserver.data.xml.SkillData; import org.l2jmobius.gameserver.data.xml.SkillData;
import org.l2jmobius.gameserver.enums.SubclassInfoType; import org.l2jmobius.gameserver.enums.SubclassInfoType;
import org.l2jmobius.gameserver.model.StatSet; import org.l2jmobius.gameserver.model.StatSet;
@@ -60,49 +61,53 @@ public class ClassChange extends AbstractEffect
return; return;
} }
final PlayerInstance player = effected.getActingPlayer(); // Executing later otherwise interrupted exception during storeCharBase.
if (player.isTransformed() || player.isSubclassLocked() || player.isAffectedBySkill(IDENTITY_CRISIS_SKILL_ID)) ThreadPool.schedule(() ->
{ {
player.sendMessage("You cannot switch your class right now!"); final PlayerInstance player = effected.getActingPlayer();
return; if (player.isTransformed() || player.isSubclassLocked() || player.isAffectedBySkill(IDENTITY_CRISIS_SKILL_ID))
}
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())
{ {
// And re-add player.sendMessage("You cannot switch your class right now!");
if (member != player) 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);
} }
} }

View File

@@ -16,6 +16,7 @@
*/ */
package handlers.effecthandlers; package handlers.effecthandlers;
import org.l2jmobius.commons.threads.ThreadPool;
import org.l2jmobius.gameserver.data.xml.SkillData; import org.l2jmobius.gameserver.data.xml.SkillData;
import org.l2jmobius.gameserver.enums.SubclassInfoType; import org.l2jmobius.gameserver.enums.SubclassInfoType;
import org.l2jmobius.gameserver.model.StatSet; import org.l2jmobius.gameserver.model.StatSet;
@@ -60,49 +61,53 @@ public class ClassChange extends AbstractEffect
return; return;
} }
final PlayerInstance player = effected.getActingPlayer(); // Executing later otherwise interrupted exception during storeCharBase.
if (player.isTransformed() || player.isSubclassLocked() || player.isAffectedBySkill(IDENTITY_CRISIS_SKILL_ID)) ThreadPool.schedule(() ->
{ {
player.sendMessage("You cannot switch your class right now!"); final PlayerInstance player = effected.getActingPlayer();
return; if (player.isTransformed() || player.isSubclassLocked() || player.isAffectedBySkill(IDENTITY_CRISIS_SKILL_ID))
}
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())
{ {
// And re-add player.sendMessage("You cannot switch your class right now!");
if (member != player) 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);
} }
} }

View File

@@ -16,6 +16,7 @@
*/ */
package handlers.effecthandlers; package handlers.effecthandlers;
import org.l2jmobius.commons.threads.ThreadPool;
import org.l2jmobius.gameserver.data.xml.SkillData; import org.l2jmobius.gameserver.data.xml.SkillData;
import org.l2jmobius.gameserver.enums.SubclassInfoType; import org.l2jmobius.gameserver.enums.SubclassInfoType;
import org.l2jmobius.gameserver.model.StatSet; import org.l2jmobius.gameserver.model.StatSet;
@@ -60,49 +61,53 @@ public class ClassChange extends AbstractEffect
return; return;
} }
final PlayerInstance player = effected.getActingPlayer(); // Executing later otherwise interrupted exception during storeCharBase.
if (player.isTransformed() || player.isSubclassLocked() || player.isAffectedBySkill(IDENTITY_CRISIS_SKILL_ID)) ThreadPool.schedule(() ->
{ {
player.sendMessage("You cannot switch your class right now!"); final PlayerInstance player = effected.getActingPlayer();
return; if (player.isTransformed() || player.isSubclassLocked() || player.isAffectedBySkill(IDENTITY_CRISIS_SKILL_ID))
}
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())
{ {
// And re-add player.sendMessage("You cannot switch your class right now!");
if (member != player) 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);
} }
} }

View File

@@ -16,6 +16,7 @@
*/ */
package handlers.effecthandlers; package handlers.effecthandlers;
import org.l2jmobius.commons.threads.ThreadPool;
import org.l2jmobius.gameserver.data.xml.SkillData; import org.l2jmobius.gameserver.data.xml.SkillData;
import org.l2jmobius.gameserver.enums.SubclassInfoType; import org.l2jmobius.gameserver.enums.SubclassInfoType;
import org.l2jmobius.gameserver.model.StatSet; import org.l2jmobius.gameserver.model.StatSet;
@@ -60,49 +61,53 @@ public class ClassChange extends AbstractEffect
return; return;
} }
final PlayerInstance player = effected.getActingPlayer(); // Executing later otherwise interrupted exception during storeCharBase.
if (player.isTransformed() || player.isSubclassLocked() || player.isAffectedBySkill(IDENTITY_CRISIS_SKILL_ID)) ThreadPool.schedule(() ->
{ {
player.sendMessage("You cannot switch your class right now!"); final PlayerInstance player = effected.getActingPlayer();
return; if (player.isTransformed() || player.isSubclassLocked() || player.isAffectedBySkill(IDENTITY_CRISIS_SKILL_ID))
}
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())
{ {
// And re-add player.sendMessage("You cannot switch your class right now!");
if (member != player) 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);
} }
} }

View File

@@ -16,6 +16,7 @@
*/ */
package handlers.effecthandlers; package handlers.effecthandlers;
import org.l2jmobius.commons.threads.ThreadPool;
import org.l2jmobius.gameserver.data.xml.SkillData; import org.l2jmobius.gameserver.data.xml.SkillData;
import org.l2jmobius.gameserver.enums.SubclassInfoType; import org.l2jmobius.gameserver.enums.SubclassInfoType;
import org.l2jmobius.gameserver.model.Shortcut; import org.l2jmobius.gameserver.model.Shortcut;
@@ -62,91 +63,95 @@ public class ClassChange extends AbstractEffect
return; return;
} }
final PlayerInstance player = effected.getActingPlayer(); // Executing later otherwise interrupted exception during storeCharBase.
if (player.isTransformed() || player.isSubclassLocked() || player.isAffectedBySkill(IDENTITY_CRISIS_SKILL_ID)) ThreadPool.schedule(() ->
{ {
player.sendMessage("You cannot switch your class right now!"); final PlayerInstance player = effected.getActingPlayer();
return; if (player.isTransformed() || player.isSubclassLocked() || player.isAffectedBySkill(IDENTITY_CRISIS_SKILL_ID))
}
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())
{ {
// And re-add player.sendMessage("You cannot switch your class right now!");
if (member != player) return;
{
member.sendPacket(new PartySmallWindowAll(member, player.getParty()));
}
}
}
// Stop auto use.
for (Shortcut shortcut : player.getAllShortCuts())
{
if (!shortcut.isAutoUse())
{
continue;
} }
player.removeAutoShortcut(shortcut.getSlot(), shortcut.getPage()); final Skill identityCrisis = SkillData.getInstance().getSkill(IDENTITY_CRISIS_SKILL_ID, 1);
if (identityCrisis != null)
if (player.getAutoUseSettings().isAutoSkill(shortcut.getId()))
{ {
final Skill knownSkill = player.getKnownSkill(shortcut.getId()); identityCrisis.applyEffects(player, player);
if (knownSkill != null) }
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())
{ {
if (knownSkill.isBad()) // And re-add
if (member != player)
{ {
AutoUseTaskManager.getInstance().removeAutoSkill(player, shortcut.getId()); member.sendPacket(new PartySmallWindowAll(member, player.getParty()));
}
else
{
AutoUseTaskManager.getInstance().removeAutoBuff(player, shortcut.getId());
} }
} }
} }
else
// Stop auto use.
for (Shortcut shortcut : player.getAllShortCuts())
{ {
final ItemInstance knownItem = player.getInventory().getItemByObjectId(shortcut.getId()); if (!shortcut.isAutoUse())
if (knownItem != null)
{ {
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);
} }
} }

View File

@@ -16,6 +16,7 @@
*/ */
package handlers.effecthandlers; package handlers.effecthandlers;
import org.l2jmobius.commons.threads.ThreadPool;
import org.l2jmobius.gameserver.data.xml.SkillData; import org.l2jmobius.gameserver.data.xml.SkillData;
import org.l2jmobius.gameserver.enums.SubclassInfoType; import org.l2jmobius.gameserver.enums.SubclassInfoType;
import org.l2jmobius.gameserver.model.StatSet; import org.l2jmobius.gameserver.model.StatSet;
@@ -60,49 +61,53 @@ public class ClassChange extends AbstractEffect
return; return;
} }
final PlayerInstance player = effected.getActingPlayer(); // Executing later otherwise interrupted exception during storeCharBase.
if (player.isTransformed() || player.isSubclassLocked() || player.isAffectedBySkill(IDENTITY_CRISIS_SKILL_ID)) ThreadPool.schedule(() ->
{ {
player.sendMessage("You cannot switch your class right now!"); final PlayerInstance player = effected.getActingPlayer();
return; if (player.isTransformed() || player.isSubclassLocked() || player.isAffectedBySkill(IDENTITY_CRISIS_SKILL_ID))
}
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())
{ {
// And re-add player.sendMessage("You cannot switch your class right now!");
if (member != player) 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);
} }
} }

View File

@@ -16,6 +16,7 @@
*/ */
package handlers.effecthandlers; package handlers.effecthandlers;
import org.l2jmobius.commons.threads.ThreadPool;
import org.l2jmobius.gameserver.data.xml.SkillData; import org.l2jmobius.gameserver.data.xml.SkillData;
import org.l2jmobius.gameserver.enums.SubclassInfoType; import org.l2jmobius.gameserver.enums.SubclassInfoType;
import org.l2jmobius.gameserver.model.Shortcut; import org.l2jmobius.gameserver.model.Shortcut;
@@ -62,91 +63,95 @@ public class ClassChange extends AbstractEffect
return; return;
} }
final PlayerInstance player = effected.getActingPlayer(); // Executing later otherwise interrupted exception during storeCharBase.
if (player.isTransformed() || player.isSubclassLocked() || player.isAffectedBySkill(IDENTITY_CRISIS_SKILL_ID)) ThreadPool.schedule(() ->
{ {
player.sendMessage("You cannot switch your class right now!"); final PlayerInstance player = effected.getActingPlayer();
return; if (player.isTransformed() || player.isSubclassLocked() || player.isAffectedBySkill(IDENTITY_CRISIS_SKILL_ID))
}
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())
{ {
// And re-add player.sendMessage("You cannot switch your class right now!");
if (member != player) return;
{
member.sendPacket(new PartySmallWindowAll(member, player.getParty()));
}
}
}
// Stop auto use.
for (Shortcut shortcut : player.getAllShortCuts())
{
if (!shortcut.isAutoUse())
{
continue;
} }
player.removeAutoShortcut(shortcut.getSlot(), shortcut.getPage()); final Skill identityCrisis = SkillData.getInstance().getSkill(IDENTITY_CRISIS_SKILL_ID, 1);
if (identityCrisis != null)
if (player.getAutoUseSettings().isAutoSkill(shortcut.getId()))
{ {
final Skill knownSkill = player.getKnownSkill(shortcut.getId()); identityCrisis.applyEffects(player, player);
if (knownSkill != null) }
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())
{ {
if (knownSkill.isBad()) // And re-add
if (member != player)
{ {
AutoUseTaskManager.getInstance().removeAutoSkill(player, shortcut.getId()); member.sendPacket(new PartySmallWindowAll(member, player.getParty()));
}
else
{
AutoUseTaskManager.getInstance().removeAutoBuff(player, shortcut.getId());
} }
} }
} }
else
// Stop auto use.
for (Shortcut shortcut : player.getAllShortCuts())
{ {
final ItemInstance knownItem = player.getInventory().getItemByObjectId(shortcut.getId()); if (!shortcut.isAutoUse())
if (knownItem != null)
{ {
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);
} }
} }

View File

@@ -16,6 +16,7 @@
*/ */
package handlers.effecthandlers; package handlers.effecthandlers;
import org.l2jmobius.commons.threads.ThreadPool;
import org.l2jmobius.gameserver.data.xml.SkillData; import org.l2jmobius.gameserver.data.xml.SkillData;
import org.l2jmobius.gameserver.enums.SubclassInfoType; import org.l2jmobius.gameserver.enums.SubclassInfoType;
import org.l2jmobius.gameserver.model.Shortcut; import org.l2jmobius.gameserver.model.Shortcut;
@@ -62,91 +63,95 @@ public class ClassChange extends AbstractEffect
return; return;
} }
final PlayerInstance player = effected.getActingPlayer(); // Executing later otherwise interrupted exception during storeCharBase.
if (player.isTransformed() || player.isSubclassLocked() || player.isAffectedBySkill(IDENTITY_CRISIS_SKILL_ID)) ThreadPool.schedule(() ->
{ {
player.sendMessage("You cannot switch your class right now!"); final PlayerInstance player = effected.getActingPlayer();
return; if (player.isTransformed() || player.isSubclassLocked() || player.isAffectedBySkill(IDENTITY_CRISIS_SKILL_ID))
}
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())
{ {
// And re-add player.sendMessage("You cannot switch your class right now!");
if (member != player) return;
{
member.sendPacket(new PartySmallWindowAll(member, player.getParty()));
}
}
}
// Stop auto use.
for (Shortcut shortcut : player.getAllShortCuts())
{
if (!shortcut.isAutoUse())
{
continue;
} }
player.removeAutoShortcut(shortcut.getSlot(), shortcut.getPage()); final Skill identityCrisis = SkillData.getInstance().getSkill(IDENTITY_CRISIS_SKILL_ID, 1);
if (identityCrisis != null)
if (player.getAutoUseSettings().isAutoSkill(shortcut.getId()))
{ {
final Skill knownSkill = player.getKnownSkill(shortcut.getId()); identityCrisis.applyEffects(player, player);
if (knownSkill != null) }
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())
{ {
if (knownSkill.isBad()) // And re-add
if (member != player)
{ {
AutoUseTaskManager.getInstance().removeAutoSkill(player, shortcut.getId()); member.sendPacket(new PartySmallWindowAll(member, player.getParty()));
}
else
{
AutoUseTaskManager.getInstance().removeAutoBuff(player, shortcut.getId());
} }
} }
} }
else
// Stop auto use.
for (Shortcut shortcut : player.getAllShortCuts())
{ {
final ItemInstance knownItem = player.getInventory().getItemByObjectId(shortcut.getId()); if (!shortcut.isAutoUse())
if (knownItem != null)
{ {
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);
} }
} }