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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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