Removed packet locks and relative improvements.
This commit is contained in:
		@@ -16,7 +16,6 @@
 | 
			
		||||
 */
 | 
			
		||||
package handlers.effecthandlers;
 | 
			
		||||
 | 
			
		||||
import org.l2jmobius.commons.concurrent.ThreadPool;
 | 
			
		||||
import org.l2jmobius.gameserver.data.xml.impl.SkillData;
 | 
			
		||||
import org.l2jmobius.gameserver.enums.SubclassInfoType;
 | 
			
		||||
import org.l2jmobius.gameserver.model.StatsSet;
 | 
			
		||||
@@ -28,6 +27,7 @@ import org.l2jmobius.gameserver.model.olympiad.OlympiadManager;
 | 
			
		||||
import org.l2jmobius.gameserver.model.skills.Skill;
 | 
			
		||||
import org.l2jmobius.gameserver.network.SystemMessageId;
 | 
			
		||||
import org.l2jmobius.gameserver.network.serverpackets.AcquireSkillList;
 | 
			
		||||
import org.l2jmobius.gameserver.network.serverpackets.ExStorageMaxCount;
 | 
			
		||||
import org.l2jmobius.gameserver.network.serverpackets.ExSubjobInfo;
 | 
			
		||||
import org.l2jmobius.gameserver.network.serverpackets.SystemMessage;
 | 
			
		||||
 | 
			
		||||
@@ -53,40 +53,40 @@ public class ClassChange extends AbstractEffect
 | 
			
		||||
	@Override
 | 
			
		||||
	public void instant(Creature effector, Creature effected, Skill skill, ItemInstance item)
 | 
			
		||||
	{
 | 
			
		||||
		if (effected.isPlayer())
 | 
			
		||||
		if (!effected.isPlayer())
 | 
			
		||||
		{
 | 
			
		||||
			final PlayerInstance player = effected.getActingPlayer();
 | 
			
		||||
			// TODO: FIX ME - Executing 100 ms later otherwise interupted exception during storeCharBase()
 | 
			
		||||
			ThreadPool.schedule(() ->
 | 
			
		||||
			{
 | 
			
		||||
				final int activeClass = player.getClassId().getId();
 | 
			
		||||
				
 | 
			
		||||
				if (!player.setActiveClass(_index))
 | 
			
		||||
				{
 | 
			
		||||
					player.sendMessage("You cannot switch your class right now!");
 | 
			
		||||
					return;
 | 
			
		||||
				}
 | 
			
		||||
				
 | 
			
		||||
				if (OlympiadManager.getInstance().isRegisteredInComp(player))
 | 
			
		||||
				{
 | 
			
		||||
					OlympiadManager.getInstance().unRegisterNoble(player);
 | 
			
		||||
				}
 | 
			
		||||
				
 | 
			
		||||
				final Skill identifyCrisis = SkillData.getInstance().getSkill(IDENTITY_CRISIS_SKILL_ID, 1);
 | 
			
		||||
				if (identifyCrisis != null)
 | 
			
		||||
				{
 | 
			
		||||
					identifyCrisis.applyEffects(player, player);
 | 
			
		||||
				}
 | 
			
		||||
				
 | 
			
		||||
				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 AcquireSkillList(player));
 | 
			
		||||
				player.sendPacket(new ExSubjobInfo(player, SubclassInfoType.CLASS_CHANGED));
 | 
			
		||||
			}, 100);
 | 
			
		||||
			return;
 | 
			
		||||
		}
 | 
			
		||||
		
 | 
			
		||||
		final PlayerInstance player = effected.getActingPlayer();
 | 
			
		||||
		if (player.isTransformed() || player.isSubclassLocked() || player.isAffectedBySkill(IDENTITY_CRISIS_SKILL_ID))
 | 
			
		||||
		{
 | 
			
		||||
			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));
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user