diff --git a/L2J_Mobius_5.0_Salvation/dist/game/data/scripts/handlers/EffectMasterHandler.java b/L2J_Mobius_5.0_Salvation/dist/game/data/scripts/handlers/EffectMasterHandler.java index 60b44a0757..8e93bb3469 100644 --- a/L2J_Mobius_5.0_Salvation/dist/game/data/scripts/handlers/EffectMasterHandler.java +++ b/L2J_Mobius_5.0_Salvation/dist/game/data/scripts/handlers/EffectMasterHandler.java @@ -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); diff --git a/L2J_Mobius_5.0_Salvation/dist/game/data/scripts/handlers/effecthandlers/ReplaceSkillBySkill.java b/L2J_Mobius_5.0_Salvation/dist/game/data/scripts/handlers/effecthandlers/ReplaceSkillBySkill.java new file mode 100644 index 0000000000..8abc6f37a6 --- /dev/null +++ b/L2J_Mobius_5.0_Salvation/dist/game/data/scripts/handlers/effecthandlers/ReplaceSkillBySkill.java @@ -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 . + */ +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); + } +} diff --git a/L2J_Mobius_5.0_Salvation/dist/game/data/stats/skills/19400-19499.xml b/L2J_Mobius_5.0_Salvation/dist/game/data/stats/skills/19400-19499.xml index a393fb2493..e1df78e775 100644 --- a/L2J_Mobius_5.0_Salvation/dist/game/data/stats/skills/19400-19499.xml +++ b/L2J_Mobius_5.0_Salvation/dist/game/data/stats/skills/19400-19499.xml @@ -1034,6 +1034,14 @@ SELF SINGLE + + 11509 + 11513 + + + 11510 + 11514 + 300 diff --git a/L2J_Mobius_5.0_Salvation/dist/game/data/stats/skills/documentation.txt b/L2J_Mobius_5.0_Salvation/dist/game/data/stats/skills/documentation.txt index c044f24971..7813f8768c 100644 --- a/L2J_Mobius_5.0_Salvation/dist/game/data/stats/skills/documentation.txt +++ b/L2J_Mobius_5.0_Salvation/dist/game/data/stats/skills/documentation.txt @@ -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) diff --git a/L2J_Mobius_5.0_Salvation/dist/game/data/xsd/skills.xsd b/L2J_Mobius_5.0_Salvation/dist/game/data/xsd/skills.xsd index 581a24af54..569340f596 100644 --- a/L2J_Mobius_5.0_Salvation/dist/game/data/xsd/skills.xsd +++ b/L2J_Mobius_5.0_Salvation/dist/game/data/xsd/skills.xsd @@ -2068,6 +2068,8 @@ + + diff --git a/L2J_Mobius_5.5_EtinasFate/dist/game/data/scripts/handlers/EffectMasterHandler.java b/L2J_Mobius_5.5_EtinasFate/dist/game/data/scripts/handlers/EffectMasterHandler.java index cf771c12ce..fc94687daa 100644 --- a/L2J_Mobius_5.5_EtinasFate/dist/game/data/scripts/handlers/EffectMasterHandler.java +++ b/L2J_Mobius_5.5_EtinasFate/dist/game/data/scripts/handlers/EffectMasterHandler.java @@ -286,6 +286,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); diff --git a/L2J_Mobius_5.5_EtinasFate/dist/game/data/scripts/handlers/effecthandlers/ReplaceSkillBySkill.java b/L2J_Mobius_5.5_EtinasFate/dist/game/data/scripts/handlers/effecthandlers/ReplaceSkillBySkill.java new file mode 100644 index 0000000000..8abc6f37a6 --- /dev/null +++ b/L2J_Mobius_5.5_EtinasFate/dist/game/data/scripts/handlers/effecthandlers/ReplaceSkillBySkill.java @@ -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 . + */ +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); + } +} diff --git a/L2J_Mobius_5.5_EtinasFate/dist/game/data/stats/skills/11500-11599.xml b/L2J_Mobius_5.5_EtinasFate/dist/game/data/stats/skills/11500-11599.xml index 51dc017561..e8d757a44f 100644 --- a/L2J_Mobius_5.5_EtinasFate/dist/game/data/stats/skills/11500-11599.xml +++ b/L2J_Mobius_5.5_EtinasFate/dist/game/data/stats/skills/11500-11599.xml @@ -389,15 +389,15 @@ - + icon.skill11513 1 3 STUN STUN - 150 - {base + base / 100 * subIndex} + 150 + {base + (base / 100 * subIndex)} NONE ATTACK @@ -413,10 +413,12 @@ 49 51 53 + 55 + 57 - 600 - {base + 10 * subIndex} + 600 + {base + (10 * subIndex)} 800 200 @@ -432,6 +434,8 @@ -712 -712 -712 + -712 + -712 5 800 @@ -445,6 +449,8 @@ 101 102 105 + 107 + 109 SHOCK ENEMY @@ -460,8 +466,8 @@ - 200 - {base - (3 * subIndex)} + 200 + {base - (3 * subIndex)} diff --git a/L2J_Mobius_5.5_EtinasFate/dist/game/data/stats/skills/19400-19499.xml b/L2J_Mobius_5.5_EtinasFate/dist/game/data/stats/skills/19400-19499.xml index 43ea37bef3..ed965a1244 100644 --- a/L2J_Mobius_5.5_EtinasFate/dist/game/data/stats/skills/19400-19499.xml +++ b/L2J_Mobius_5.5_EtinasFate/dist/game/data/stats/skills/19400-19499.xml @@ -1038,6 +1038,14 @@ SELF SINGLE + + 11509 + 11513 + + + 11510 + 11514 + 300 diff --git a/L2J_Mobius_5.5_EtinasFate/dist/game/data/stats/skills/documentation.txt b/L2J_Mobius_5.5_EtinasFate/dist/game/data/stats/skills/documentation.txt index 01f2f0bf2d..68296e7795 100644 --- a/L2J_Mobius_5.5_EtinasFate/dist/game/data/stats/skills/documentation.txt +++ b/L2J_Mobius_5.5_EtinasFate/dist/game/data/stats/skills/documentation.txt @@ -255,6 +255,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) diff --git a/L2J_Mobius_5.5_EtinasFate/dist/game/data/xsd/skills.xsd b/L2J_Mobius_5.5_EtinasFate/dist/game/data/xsd/skills.xsd index 581a24af54..569340f596 100644 --- a/L2J_Mobius_5.5_EtinasFate/dist/game/data/xsd/skills.xsd +++ b/L2J_Mobius_5.5_EtinasFate/dist/game/data/xsd/skills.xsd @@ -2068,6 +2068,8 @@ + + diff --git a/L2J_Mobius_6.0_Fafurion/dist/game/data/scripts/handlers/EffectMasterHandler.java b/L2J_Mobius_6.0_Fafurion/dist/game/data/scripts/handlers/EffectMasterHandler.java index cf771c12ce..fc94687daa 100644 --- a/L2J_Mobius_6.0_Fafurion/dist/game/data/scripts/handlers/EffectMasterHandler.java +++ b/L2J_Mobius_6.0_Fafurion/dist/game/data/scripts/handlers/EffectMasterHandler.java @@ -286,6 +286,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); diff --git a/L2J_Mobius_6.0_Fafurion/dist/game/data/scripts/handlers/effecthandlers/ReplaceSkillBySkill.java b/L2J_Mobius_6.0_Fafurion/dist/game/data/scripts/handlers/effecthandlers/ReplaceSkillBySkill.java new file mode 100644 index 0000000000..8abc6f37a6 --- /dev/null +++ b/L2J_Mobius_6.0_Fafurion/dist/game/data/scripts/handlers/effecthandlers/ReplaceSkillBySkill.java @@ -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 . + */ +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); + } +} diff --git a/L2J_Mobius_6.0_Fafurion/dist/game/data/stats/skills/11500-11599.xml b/L2J_Mobius_6.0_Fafurion/dist/game/data/stats/skills/11500-11599.xml index ba39afa479..181145b733 100644 --- a/L2J_Mobius_6.0_Fafurion/dist/game/data/stats/skills/11500-11599.xml +++ b/L2J_Mobius_6.0_Fafurion/dist/game/data/stats/skills/11500-11599.xml @@ -883,15 +883,15 @@ - + icon.skill11514 5 20 ULTIMATE_DEBUFF - 99 - {base + (base / 100 * subIndex)} + 99 + {base + (base / 100 * subIndex)} 5-12 200 @@ -910,6 +910,8 @@ 101 103 105 + 107 + 109 130 @@ -923,6 +925,8 @@ 164 168 172 + 176 + 180 ATTACK A2 @@ -939,6 +943,8 @@ -712 -712 -712 + -712 + -712 NONE 5 @@ -971,13 +977,15 @@ 19113 20045 20977 - {base + (base / 100 * subIndex)} + 21964 + 22952 + {base + (base / 100 * subIndex)} true 5 - 1 - {0.99 - 0.006 * (subIndex - 1)} + 1 + {0.99 - 0.006 * (subIndex - 1)} @@ -1001,15 +1009,15 @@ - + icon.skill11509 5 20 CRITICAL_PROB_DOWN - 99 - {base + (base / 100 * subIndex)} + 99 + {base + (base / 100 * subIndex)} 5-12 200 @@ -1028,6 +1036,8 @@ 101 103 105 + 107 + 109 146 @@ -1041,6 +1051,8 @@ 188 194 200 + 204 + 208 ATTACK A2 @@ -1057,6 +1069,8 @@ -712 -712 -712 + -712 + -712 NONE 5 @@ -1089,13 +1103,15 @@ 21340 22380 23420 - {base + (base / 100 * subIndex)} + 24522 + 25624 + {base + (base / 100 * subIndex)} true 5 - 1 - {0.99 - 0.006 * (subIndex - 1)} + 1 + {0.99 - 0.006 * (subIndex - 1)} diff --git a/L2J_Mobius_6.0_Fafurion/dist/game/data/stats/skills/19400-19499.xml b/L2J_Mobius_6.0_Fafurion/dist/game/data/stats/skills/19400-19499.xml index 41b766e727..0450f090df 100644 --- a/L2J_Mobius_6.0_Fafurion/dist/game/data/stats/skills/19400-19499.xml +++ b/L2J_Mobius_6.0_Fafurion/dist/game/data/stats/skills/19400-19499.xml @@ -1058,6 +1058,14 @@ SELF SINGLE + + 11509 + 11513 + + + 11510 + 11514 + 300 diff --git a/L2J_Mobius_6.0_Fafurion/dist/game/data/stats/skills/documentation.txt b/L2J_Mobius_6.0_Fafurion/dist/game/data/stats/skills/documentation.txt index 01f2f0bf2d..68296e7795 100644 --- a/L2J_Mobius_6.0_Fafurion/dist/game/data/stats/skills/documentation.txt +++ b/L2J_Mobius_6.0_Fafurion/dist/game/data/stats/skills/documentation.txt @@ -255,6 +255,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) diff --git a/L2J_Mobius_6.0_Fafurion/dist/game/data/xsd/skills.xsd b/L2J_Mobius_6.0_Fafurion/dist/game/data/xsd/skills.xsd index 581a24af54..569340f596 100644 --- a/L2J_Mobius_6.0_Fafurion/dist/game/data/xsd/skills.xsd +++ b/L2J_Mobius_6.0_Fafurion/dist/game/data/xsd/skills.xsd @@ -2068,6 +2068,8 @@ + +