ClassChange effect using a small delay.
This commit is contained in:
		@@ -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);
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user