Addition of class change packets.
This commit is contained in:
		| @@ -49,6 +49,7 @@ import org.l2jmobius.gameserver.network.clientpackets.awakening.RequestCallToCha | ||||
| import org.l2jmobius.gameserver.network.clientpackets.ceremonyofchaos.RequestCancelCuriousHouse; | ||||
| import org.l2jmobius.gameserver.network.clientpackets.ceremonyofchaos.RequestCuriousHouseHtml; | ||||
| import org.l2jmobius.gameserver.network.clientpackets.ceremonyofchaos.RequestJoinCuriousHouse; | ||||
| import org.l2jmobius.gameserver.network.clientpackets.classchange.ExRequestClassChange; | ||||
| import org.l2jmobius.gameserver.network.clientpackets.commission.RequestCommissionBuyInfo; | ||||
| import org.l2jmobius.gameserver.network.clientpackets.commission.RequestCommissionBuyItem; | ||||
| import org.l2jmobius.gameserver.network.clientpackets.commission.RequestCommissionCancel; | ||||
| @@ -467,7 +468,7 @@ public enum ExIncomingPackets implements IIncomingPackets<GameClient> | ||||
| 	EX_TRY_ENCHANT_ARTIFACT(0x160, null, ConnectionState.IN_GAME), // 152 | ||||
| 	EX_XIGN_CODE(0x161, null, ConnectionState.IN_GAME), // 152 | ||||
| 	EX_OPEN_HTML(0x164, ExOpenDimensionalHtml::new, ConnectionState.IN_GAME), // 228 | ||||
| 	EX_REQUEST_CLASS_CHANGE(0x165, null, ConnectionState.IN_GAME), // 228 | ||||
| 	EX_REQUEST_CLASS_CHANGE(0x165, ExRequestClassChange::new, ConnectionState.IN_GAME), // 228 | ||||
| 	EX_REQUEST_CLASS_CHANGE_VERIFYING(0x166, null, ConnectionState.IN_GAME), // 228 | ||||
| 	EX_REQUEST_TELEPORT(0x167, ExRequestTeleport::new, ConnectionState.IN_GAME), // 228 | ||||
| 	EX_COSTUME_COLLECTION_SKILL_ACTIVE(0x16B, null, ConnectionState.IN_GAME), // 228 | ||||
|   | ||||
| @@ -0,0 +1,118 @@ | ||||
| /* | ||||
|  * This file is part of the L2J Mobius project. | ||||
|  *  | ||||
|  * This program is free software: you can redistribute it and/or modify | ||||
|  * it under the terms of the GNU General Public License as published by | ||||
|  * the Free Software Foundation, either version 3 of the License, or | ||||
|  * (at your option) any later version. | ||||
|  *  | ||||
|  * This program is distributed in the hope that it will be useful, | ||||
|  * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||||
|  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU | ||||
|  * General Public License for more details. | ||||
|  *  | ||||
|  * You should have received a copy of the GNU General Public License | ||||
|  * along with this program. If not, see <http://www.gnu.org/licenses/>. | ||||
|  */ | ||||
| package org.l2jmobius.gameserver.network.clientpackets.classchange; | ||||
|  | ||||
| import org.l2jmobius.Config; | ||||
| import org.l2jmobius.commons.network.PacketReader; | ||||
| import org.l2jmobius.gameserver.data.xml.impl.CategoryData; | ||||
| import org.l2jmobius.gameserver.data.xml.impl.SkillData; | ||||
| import org.l2jmobius.gameserver.data.xml.impl.SkillTreesData; | ||||
| import org.l2jmobius.gameserver.enums.CategoryType; | ||||
| import org.l2jmobius.gameserver.model.SkillLearn; | ||||
| import org.l2jmobius.gameserver.model.actor.instance.PlayerInstance; | ||||
| import org.l2jmobius.gameserver.model.base.ClassId; | ||||
| import org.l2jmobius.gameserver.network.GameClient; | ||||
| import org.l2jmobius.gameserver.network.clientpackets.IClientIncomingPacket; | ||||
| import org.l2jmobius.gameserver.network.serverpackets.PlaySound; | ||||
|  | ||||
| /** | ||||
|  * @author Mobius | ||||
|  */ | ||||
| public class ExRequestClassChange implements IClientIncomingPacket | ||||
| { | ||||
| 	private int _classId; | ||||
| 	 | ||||
| 	@Override | ||||
| 	public boolean read(GameClient client, PacketReader packet) | ||||
| 	{ | ||||
| 		_classId = packet.readD(); | ||||
| 		return true; | ||||
| 	} | ||||
| 	 | ||||
| 	@Override | ||||
| 	public void run(GameClient client) | ||||
| 	{ | ||||
| 		final PlayerInstance player = client.getPlayer(); | ||||
| 		if (player == null) | ||||
| 		{ | ||||
| 			return; | ||||
| 		} | ||||
| 		 | ||||
| 		boolean properId = false; | ||||
| 		for (ClassId cId : player.getClassId().getNextClassIds()) | ||||
| 		{ | ||||
| 			if (cId.getId() == _classId) | ||||
| 			{ | ||||
| 				properId = true; | ||||
| 				break; | ||||
| 			} | ||||
| 		} | ||||
| 		if (!properId) | ||||
| 		{ | ||||
| 			LOGGER.warning(player + " tried to change class from " + player.getClassId() + " to " + ClassId.getClassId(_classId) + "."); | ||||
| 			return; | ||||
| 		} | ||||
| 		 | ||||
| 		boolean canChange = false; | ||||
| 		final int playerLevel = player.getLevel(); | ||||
| 		if (player.isInCategory(CategoryType.FIRST_CLASS_GROUP) && (playerLevel >= 18)) | ||||
| 		{ | ||||
| 			canChange = CategoryData.getInstance().isInCategory(CategoryType.SECOND_CLASS_GROUP, _classId); | ||||
| 		} | ||||
| 		else if (player.isInCategory(CategoryType.SECOND_CLASS_GROUP) && (playerLevel >= 38)) | ||||
| 		{ | ||||
| 			canChange = CategoryData.getInstance().isInCategory(CategoryType.THIRD_CLASS_GROUP, _classId); | ||||
| 		} | ||||
| 		else if (player.isInCategory(CategoryType.THIRD_CLASS_GROUP) && (playerLevel >= 76)) | ||||
| 		{ | ||||
| 			canChange = CategoryData.getInstance().isInCategory(CategoryType.FOURTH_CLASS_GROUP, _classId); | ||||
| 		} | ||||
| 		else if (player.isInCategory(CategoryType.FOURTH_CLASS_GROUP) && (playerLevel >= 85)) | ||||
| 		{ | ||||
| 			canChange = CategoryData.getInstance().isInCategory(CategoryType.SIXTH_CLASS_GROUP, _classId); | ||||
| 		} | ||||
| 		 | ||||
| 		if (canChange) | ||||
| 		{ | ||||
| 			player.setClassId(_classId); | ||||
| 			if (player.isSubClassActive()) | ||||
| 			{ | ||||
| 				player.getSubClasses().get(player.getClassIndex()).setClassId(player.getActiveClass()); | ||||
| 			} | ||||
| 			else | ||||
| 			{ | ||||
| 				player.setBaseClass(player.getActiveClass()); | ||||
| 			} | ||||
| 			if (player.isInCategory(CategoryType.SIXTH_CLASS_GROUP)) | ||||
| 			{ | ||||
| 				SkillTreesData.getInstance().cleanSkillUponAwakening(player); | ||||
| 				for (SkillLearn skill : SkillTreesData.getInstance().getRaceSkillTree(player.getRace())) | ||||
| 				{ | ||||
| 					player.addSkill(SkillData.getInstance().getSkill(skill.getSkillId(), skill.getSkillLevel()), true); | ||||
| 				} | ||||
| 			} | ||||
| 			if (Config.AUTO_LEARN_SKILLS) | ||||
| 			{ | ||||
| 				player.giveAvailableSkills(Config.AUTO_LEARN_FS_SKILLS, Config.AUTO_LEARN_FP_SKILLS, true); | ||||
| 			} | ||||
| 			player.store(false); // Save player cause if server crashes before this char is saved, he will lose class. | ||||
| 			player.broadcastUserInfo(); | ||||
| 			player.sendSkillList(); | ||||
| 			player.sendPacket(new PlaySound("ItemSound.quest_fanfare_2")); | ||||
| 		} | ||||
| 	} | ||||
| } | ||||
| @@ -0,0 +1,40 @@ | ||||
| /* | ||||
|  * This file is part of the L2J Mobius project. | ||||
|  *  | ||||
|  * This program is free software: you can redistribute it and/or modify | ||||
|  * it under the terms of the GNU General Public License as published by | ||||
|  * the Free Software Foundation, either version 3 of the License, or | ||||
|  * (at your option) any later version. | ||||
|  *  | ||||
|  * This program is distributed in the hope that it will be useful, | ||||
|  * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||||
|  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU | ||||
|  * General Public License for more details. | ||||
|  *  | ||||
|  * You should have received a copy of the GNU General Public License | ||||
|  * along with this program. If not, see <http://www.gnu.org/licenses/>. | ||||
|  */ | ||||
| package org.l2jmobius.gameserver.network.serverpackets.classchange; | ||||
|  | ||||
| import org.l2jmobius.commons.network.PacketWriter; | ||||
| import org.l2jmobius.gameserver.network.OutgoingPackets; | ||||
| import org.l2jmobius.gameserver.network.serverpackets.IClientOutgoingPacket; | ||||
|  | ||||
| /** | ||||
|  * @author Mobius | ||||
|  */ | ||||
| public class ExRequestClassChangeUi implements IClientOutgoingPacket | ||||
| { | ||||
| 	public static final ExRequestClassChangeUi STATIC_PACKET = new ExRequestClassChangeUi(); | ||||
| 	 | ||||
| 	public ExRequestClassChangeUi() | ||||
| 	{ | ||||
| 	} | ||||
| 	 | ||||
| 	@Override | ||||
| 	public boolean write(PacketWriter packet) | ||||
| 	{ | ||||
| 		OutgoingPackets.EX_REQUEST_CLASS_CHANGE.writeId(packet); | ||||
| 		return true; | ||||
| 	} | ||||
| } | ||||
		Reference in New Issue
	
	Block a user
	 MobiusDevelopment
					MobiusDevelopment