Addition of ReplaceSkillBySkill effect.
This commit is contained in:
		| @@ -285,6 +285,7 @@ public final class EffectMasterHandler | ||||
| 		EffectHandler.getInstance().registerHandler("RefuelAirship", RefuelAirship::new); | ||||
| 		EffectHandler.getInstance().registerHandler("Relax", Relax::new); | ||||
| 		EffectHandler.getInstance().registerHandler("RemoveEquipPenalty", RemoveEquipPenalty::new); | ||||
| 		EffectHandler.getInstance().registerHandler("ReplaceSkillBySkill", ReplaceSkillBySkill::new); | ||||
| 		EffectHandler.getInstance().registerHandler("ResetInstanceEntry", ResetInstanceEntry::new); | ||||
| 		EffectHandler.getInstance().registerHandler("ResistAbnormalByCategory", ResistAbnormalByCategory::new); | ||||
| 		EffectHandler.getInstance().registerHandler("ResistDDMagic", ResistDDMagic::new); | ||||
|   | ||||
							
								
								
									
										117
									
								
								L2J_Mobius_5.0_Salvation/dist/game/data/scripts/handlers/effecthandlers/ReplaceSkillBySkill.java
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										117
									
								
								L2J_Mobius_5.0_Salvation/dist/game/data/scripts/handlers/effecthandlers/ReplaceSkillBySkill.java
									
									
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,117 @@ | ||||
| /* | ||||
|  * 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 handlers.effecthandlers; | ||||
|  | ||||
| import org.l2jmobius.commons.concurrent.ThreadPool; | ||||
| import org.l2jmobius.gameserver.data.xml.impl.SkillData; | ||||
| import org.l2jmobius.gameserver.enums.ShortcutType; | ||||
| import org.l2jmobius.gameserver.model.Shortcut; | ||||
| import org.l2jmobius.gameserver.model.StatsSet; | ||||
| import org.l2jmobius.gameserver.model.actor.Creature; | ||||
| import org.l2jmobius.gameserver.model.actor.instance.PlayerInstance; | ||||
| import org.l2jmobius.gameserver.model.effects.AbstractEffect; | ||||
| import org.l2jmobius.gameserver.model.holders.SkillHolder; | ||||
| import org.l2jmobius.gameserver.model.items.instance.ItemInstance; | ||||
| import org.l2jmobius.gameserver.model.skills.Skill; | ||||
| import org.l2jmobius.gameserver.network.serverpackets.ShortCutInit; | ||||
| import org.l2jmobius.gameserver.network.serverpackets.ShortCutRegister; | ||||
|  | ||||
| /** | ||||
|  * @author Mobius | ||||
|  */ | ||||
| public class ReplaceSkillBySkill extends AbstractEffect | ||||
| { | ||||
| 	private final SkillHolder _existingSkill; | ||||
| 	private final SkillHolder _replacementSkill; | ||||
| 	 | ||||
| 	public ReplaceSkillBySkill(StatsSet params) | ||||
| 	{ | ||||
| 		_existingSkill = new SkillHolder(params.getInt("existingSkillId"), params.getInt("existingSkillLevel", -1)); | ||||
| 		_replacementSkill = new SkillHolder(params.getInt("replacementSkillId"), params.getInt("replacementSkillLevel", -1)); | ||||
| 	} | ||||
| 	 | ||||
| 	@Override | ||||
| 	public void onStart(Creature effector, Creature effected, Skill skill, ItemInstance item) | ||||
| 	{ | ||||
| 		if (effected.isPlayer()) | ||||
| 		{ | ||||
| 			final PlayerInstance player = effected.getActingPlayer(); | ||||
| 			final Skill knownSkill = player.getKnownSkill(_existingSkill.getSkillId()); | ||||
| 			if ((knownSkill == null) || (knownSkill.getLevel() < _existingSkill.getSkillLevel())) | ||||
| 			{ | ||||
| 				return; | ||||
| 			} | ||||
| 			 | ||||
| 			final Skill addedSkill = SkillData.getInstance().getSkill(_replacementSkill.getSkillId(), _replacementSkill.getSkillLevel() < 1 ? knownSkill.getLevel() : _replacementSkill.getSkillLevel(), knownSkill.getSubLevel()); | ||||
| 			player.addSkill(addedSkill, false); | ||||
| 			for (Shortcut shortcut : player.getAllShortCuts()) | ||||
| 			{ | ||||
| 				if ((shortcut.getType() == ShortcutType.SKILL) && (shortcut.getId() == knownSkill.getId()) && (shortcut.getLevel() == knownSkill.getLevel())) | ||||
| 				{ | ||||
| 					final int slot = shortcut.getSlot(); | ||||
| 					final int page = shortcut.getPage(); | ||||
| 					final int characterType = shortcut.getCharacterType(); | ||||
| 					player.deleteShortCut(slot, page); | ||||
| 					final Shortcut newShortcut = new Shortcut(slot, page, ShortcutType.SKILL, addedSkill.getId(), addedSkill.getLevel(), addedSkill.getSubLevel(), characterType); | ||||
| 					player.registerShortCut(newShortcut); | ||||
| 					player.sendPacket(new ShortCutRegister(newShortcut)); | ||||
| 				} | ||||
| 			} | ||||
| 			 | ||||
| 			player.removeSkill(knownSkill, false); | ||||
| 			player.sendSkillList(); | ||||
| 			ThreadPool.schedule(() -> | ||||
| 			{ | ||||
| 				player.sendPacket(new ShortCutInit(player)); | ||||
| 			}, 1100); | ||||
| 		} | ||||
| 	} | ||||
| 	 | ||||
| 	@Override | ||||
| 	public void onExit(Creature effector, Creature effected, Skill skill) | ||||
| 	{ | ||||
| 		final PlayerInstance player = effected.getActingPlayer(); | ||||
| 		final Skill knownSkill = player.getKnownSkill(_replacementSkill.getSkillId()); | ||||
| 		if (knownSkill == null) | ||||
| 		{ | ||||
| 			return; | ||||
| 		} | ||||
| 		 | ||||
| 		final Skill addedSkill = SkillData.getInstance().getSkill(_existingSkill.getSkillId(), _existingSkill.getSkillLevel() < 1 ? knownSkill.getLevel() : _existingSkill.getSkillLevel(), knownSkill.getSubLevel()); | ||||
| 		player.addSkill(addedSkill, false); | ||||
| 		for (Shortcut shortcut : player.getAllShortCuts()) | ||||
| 		{ | ||||
| 			if ((shortcut.getType() == ShortcutType.SKILL) && (shortcut.getId() == knownSkill.getId()) && (shortcut.getLevel() == knownSkill.getLevel())) | ||||
| 			{ | ||||
| 				final int slot = shortcut.getSlot(); | ||||
| 				final int page = shortcut.getPage(); | ||||
| 				final int characterType = shortcut.getCharacterType(); | ||||
| 				player.deleteShortCut(slot, page); | ||||
| 				final Shortcut newShortcut = new Shortcut(slot, page, ShortcutType.SKILL, addedSkill.getId(), addedSkill.getLevel(), addedSkill.getSubLevel(), characterType); | ||||
| 				player.registerShortCut(newShortcut); | ||||
| 				player.sendPacket(new ShortCutRegister(newShortcut)); | ||||
| 			} | ||||
| 		} | ||||
| 		 | ||||
| 		player.removeSkill(knownSkill, false); | ||||
| 		player.sendSkillList(); | ||||
| 		ThreadPool.schedule(() -> | ||||
| 		{ | ||||
| 			player.sendPacket(new ShortCutInit(player)); | ||||
| 		}, 1100); | ||||
| 	} | ||||
| } | ||||
| @@ -1034,6 +1034,14 @@ | ||||
| 		<targetType>SELF</targetType> | ||||
| 		<affectScope>SINGLE</affectScope> | ||||
| 		<effects> | ||||
| 			<effect name="ReplaceSkillBySkill"> | ||||
| 				<existingSkillId>11509</existingSkillId> <!-- Radiant Crash (Single)--> | ||||
| 				<replacementSkillId>11513</replacementSkillId> <!-- Radiant Crash (AOE) --> | ||||
| 			</effect> | ||||
| 			<effect name="ReplaceSkillBySkill"> | ||||
| 				<existingSkillId>11510</existingSkillId> <!-- Resolving Bash (Single)--> | ||||
| 				<replacementSkillId>11514</replacementSkillId> <!-- Resolving Bash (AOE) --> | ||||
| 			</effect> | ||||
| 			<effect name="PAtk"> | ||||
| 				<amount> | ||||
| 					<value level="1">300</value> | ||||
|   | ||||
| @@ -254,6 +254,7 @@ ReflectSkill: Deflects physical/magical debuffs back to the attacker. | ||||
| RefuelAirship: Increases Airship's fuel. | ||||
| Relax: Sits down and increases HP regeneration until full. | ||||
| RemoveEquipPenalty: Removes equipment grade penalty. Its the base effect for the grade penalty mechanics. | ||||
| ReplaceSkillBySkill: While active replaces a skill with an alternative skill. (l2jmobius) | ||||
| ResetInstanceEntry: Resets instance re-entry time. (l2jmobius) | ||||
| ResistAbnormalByCategory: Buff/debuff resist stat. | ||||
| ResistDDMagic: Magic resist stat (magic attack 50% effective or 1 damage) | ||||
|   | ||||
| @@ -2068,6 +2068,8 @@ | ||||
| 															</xs:element> | ||||
| 															<xs:element name="existingSkillId" type="xs:unsignedShort" /> | ||||
| 															<xs:element name="existingSkillLevel" type="xs:unsignedByte" /> | ||||
| 															<xs:element name="replacementSkillId" type="xs:unsignedShort" /> | ||||
| 															<xs:element name="replacementSkillLevel" type="xs:unsignedByte" /> | ||||
| 															<xs:element name="addedSkillId" type="xs:unsignedShort" /> | ||||
| 															<xs:element name="addedSkillLevel" type="xs:unsignedByte" /> | ||||
| 															<xs:element name="skills" type="xs:string" /> | ||||
|   | ||||
		Reference in New Issue
	
	Block a user
	 MobiusDevelopment
					MobiusDevelopment