From 338d1d91a60568c0870b68aa3d318030f8568287 Mon Sep 17 00:00:00 2001 From: Zoey76 <zoey_76@msn.com> Date: Thu, 17 Jun 2021 02:00:36 -0300 Subject: [PATCH] Skills and effects update Added effect InstantMpByLevelSelf to skill Sweeper (42). Reworked effect HpByLevel as InstantHpByLevelSelf. Updated skill Collector's Fortune (6920). Reported-by: Old Scool L2 --- .../handlers/EffectMasterHandler.java | 3 +- ...ByLevel.java => InstantHpByLevelSelf.java} | 39 ++++------- .../instant/InstantMpByLevelSelf.java | 69 +++++++++++++++++++ .../data/stats/skills/00000-00099.xml | 10 +-- .../data/stats/skills/00500-00599.xml | 2 +- .../data/stats/skills/01100-01199.xml | 4 +- .../data/stats/skills/05800-05899.xml | 2 +- .../data/stats/skills/06900-06999.xml | 8 ++- src/main/resources/data/xsd/skills.xsd | 3 +- 9 files changed, 102 insertions(+), 38 deletions(-) rename src/main/java/com/l2jserver/datapack/handlers/effecthandlers/instant/{HpByLevel.java => InstantHpByLevelSelf.java} (54%) create mode 100644 src/main/java/com/l2jserver/datapack/handlers/effecthandlers/instant/InstantMpByLevelSelf.java diff --git a/src/main/java/com/l2jserver/datapack/handlers/EffectMasterHandler.java b/src/main/java/com/l2jserver/datapack/handlers/EffectMasterHandler.java index 80f16fbd97..283167afab 100644 --- a/src/main/java/com/l2jserver/datapack/handlers/EffectMasterHandler.java +++ b/src/main/java/com/l2jserver/datapack/handlers/EffectMasterHandler.java @@ -169,7 +169,6 @@ public final class EffectMasterHandler { Heal.class, Hide.class, Hp.class, - HpByLevel.class, HpDrain.class, HpPerMax.class, ImmobileBuff.class, @@ -178,6 +177,8 @@ public final class EffectMasterHandler { InstantCallTargetParty.class, InstantDespawn.class, InstantDispelByName.class, + InstantHpByLevelSelf.class, + InstantMpByLevelSelf.class, Lethal.class, Lucky.class, MagicalAttack.class, diff --git a/src/main/java/com/l2jserver/datapack/handlers/effecthandlers/instant/HpByLevel.java b/src/main/java/com/l2jserver/datapack/handlers/effecthandlers/instant/InstantHpByLevelSelf.java similarity index 54% rename from src/main/java/com/l2jserver/datapack/handlers/effecthandlers/instant/HpByLevel.java rename to src/main/java/com/l2jserver/datapack/handlers/effecthandlers/instant/InstantHpByLevelSelf.java index 25122720a2..1882aaa598 100644 --- a/src/main/java/com/l2jserver/datapack/handlers/effecthandlers/instant/HpByLevel.java +++ b/src/main/java/com/l2jserver/datapack/handlers/effecthandlers/instant/InstantHpByLevelSelf.java @@ -18,31 +18,25 @@ */ package com.l2jserver.datapack.handlers.effecthandlers.instant; +import static com.l2jserver.gameserver.network.SystemMessageId.S1_HP_HAS_BEEN_RESTORED; + import com.l2jserver.gameserver.model.StatsSet; -import com.l2jserver.gameserver.model.actor.L2Character; import com.l2jserver.gameserver.model.conditions.Condition; import com.l2jserver.gameserver.model.effects.AbstractEffect; -import com.l2jserver.gameserver.model.effects.L2EffectType; import com.l2jserver.gameserver.model.skills.BuffInfo; -import com.l2jserver.gameserver.network.SystemMessageId; import com.l2jserver.gameserver.network.serverpackets.SystemMessage; /** - * Hp By Level effect implementation. + * Instant Hp By Level Self effect implementation. * @author Zoey76 */ -public final class HpByLevel extends AbstractEffect { - private final double _power; +public final class InstantHpByLevelSelf extends AbstractEffect { - public HpByLevel(Condition attachCond, Condition applyCond, StatsSet set, StatsSet params) { - super(attachCond, applyCond, set, params); - - _power = params.getDouble("power", 0); - } + private final double power; - @Override - public L2EffectType getEffectType() { - return L2EffectType.BUFF; + public InstantHpByLevelSelf(Condition attachCond, Condition applyCond, StatsSet set, StatsSet params) { + super(attachCond, applyCond, set, params); + power = params.getDouble("power", 0); } @Override @@ -52,18 +46,15 @@ public final class HpByLevel extends AbstractEffect { @Override public void onStart(BuffInfo info) { - if (info.getEffector() == null) { + final var target = info.getEffector(); + if ((target == null) || target.isDead() || target.isDoor() || target.isInvul() || target.isHpBlocked()) { return; } - final L2Character activeChar = info.getEffector(); - - // Calculation - final double abs = _power; - final double absorb = ((activeChar.getCurrentHp() + abs) > activeChar.getMaxHp() ? activeChar.getMaxHp() : (activeChar.getCurrentHp() + abs)); - final int restored = (int) (absorb - activeChar.getCurrentHp()); - activeChar.setCurrentHp(absorb); - // System message - activeChar.sendPacket(SystemMessage.getSystemMessage(SystemMessageId.S1_HP_HAS_BEEN_RESTORED).addInt(restored)); + // TODO(Zoey76): This formula looks naive to me, test skill id 5878 for game mechanics. + final var absorb = Math.max(target.getCurrentHp() + power, target.getMaxHp()); + final var restored = (int) (absorb - target.getCurrentHp()); + target.setCurrentHp(absorb); + target.sendPacket(SystemMessage.getSystemMessage(S1_HP_HAS_BEEN_RESTORED).addInt(restored)); } } diff --git a/src/main/java/com/l2jserver/datapack/handlers/effecthandlers/instant/InstantMpByLevelSelf.java b/src/main/java/com/l2jserver/datapack/handlers/effecthandlers/instant/InstantMpByLevelSelf.java new file mode 100644 index 0000000000..569e4d2959 --- /dev/null +++ b/src/main/java/com/l2jserver/datapack/handlers/effecthandlers/instant/InstantMpByLevelSelf.java @@ -0,0 +1,69 @@ +/* + * Copyright © 2004-2021 L2J DataPack + * + * This file is part of L2J DataPack. + * + * L2J DataPack 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. + * + * L2J DataPack 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 com.l2jserver.datapack.handlers.effecthandlers.instant; + +import static com.l2jserver.gameserver.model.effects.L2EffectType.MANAHEAL_BY_LEVEL; +import static com.l2jserver.gameserver.model.stats.Stats.MANA_CHARGE; +import static com.l2jserver.gameserver.network.SystemMessageId.S1_MP_HAS_BEEN_RESTORED; +import static com.l2jserver.gameserver.network.serverpackets.SystemMessage.getSystemMessage; + +import com.l2jserver.gameserver.model.StatsSet; +import com.l2jserver.gameserver.model.conditions.Condition; +import com.l2jserver.gameserver.model.effects.AbstractEffect; +import com.l2jserver.gameserver.model.effects.L2EffectType; +import com.l2jserver.gameserver.model.skills.BuffInfo; + +/** + * Instant Mp By Level Self effect implementation. + * @author Zoey76 + * @version 2.6.3.0 + */ +public final class InstantMpByLevelSelf extends AbstractEffect { + + private final double power; + + public InstantMpByLevelSelf(Condition attachCond, Condition applyCond, StatsSet set, StatsSet params) { + super(attachCond, applyCond, set, params); + power = params.getDouble("power", 0); + } + + @Override + public L2EffectType getEffectType() { + return MANAHEAL_BY_LEVEL; + } + + @Override + public boolean isInstant() { + return true; + } + + @Override + public void onStart(BuffInfo info) { + final var target = info.getEffector(); + if ((target == null) || target.isDead() || target.isDoor() || target.isInvul() || target.isMpBlocked()) { + return; + } + + var amount = target.calcStat(MANA_CHARGE, power, null, null); + // Prevents overheal and negative amount. + amount = Math.max(Math.min(amount, target.getMaxRecoverableMp() - target.getCurrentMp()), 0); + target.setCurrentMp(amount + target.getCurrentMp()); + target.sendPacket(getSystemMessage(S1_MP_HAS_BEEN_RESTORED).addInt((int) amount)); + } +} diff --git a/src/main/resources/data/stats/skills/00000-00099.xml b/src/main/resources/data/stats/skills/00000-00099.xml index c91b44e9a2..7c1ddd14ae 100644 --- a/src/main/resources/data/stats/skills/00000-00099.xml +++ b/src/main/resources/data/stats/skills/00000-00099.xml @@ -1453,14 +1453,14 @@ </effects> <enchant1Effects> <effect name="Sweeper" /> - <effect name="HpByLevel"> + <effect name="InstantHpByLevelSelf"> <param power="#ench1DrainHp" /> </effect> <effect name="ConsumeBody" /> </enchant1Effects> <enchant2Effects> <effect name="Sweeper" /> - <effect name="ManaHealByLevel"> + <effect name="InstantMpByLevelSelf"> <param power="#ench2DrainMp" /> </effect> <effect name="ConsumeBody" /> @@ -1541,13 +1541,13 @@ <enchant2 name="mpConsume1" val="#ench2MpConsume1" /> <enchant2 name="mpConsume2" val="#ench2MpConsume2" /> <effects> - <effect name="HpByLevel"> + <effect name="InstantHpByLevelSelf"> <param power="#hpByLevelPower" /> </effect> <effect name="ConsumeBody" /> </effects> <enchant1Effects> - <effect name="HpByLevel"> + <effect name="InstantHpByLevelSelf"> <param power="#ench1hpByLevelPower" /> </effect> <effect name="ConsumeBody" /> @@ -2771,7 +2771,7 @@ </effect> </effects> <enchant2Effects> - <effect name="HpByLevel"> + <effect name="InstantHpByLevelSelf"> <param power="#ench2Sap" /> </effect> <effect name="TickHp"> diff --git a/src/main/resources/data/stats/skills/00500-00599.xml b/src/main/resources/data/stats/skills/00500-00599.xml index e05c54d0f9..eb374a68cf 100644 --- a/src/main/resources/data/stats/skills/00500-00599.xml +++ b/src/main/resources/data/stats/skills/00500-00599.xml @@ -2996,7 +2996,7 @@ <set name="targetType" val="NPC_BODY" /> <effects> <effect name="ConsumeBody" /> - <effect name="HpByLevel"> + <effect name="InstantHpByLevelSelf"> <param power="#hpByLevelPower" /> </effect> </effects> diff --git a/src/main/resources/data/stats/skills/01100-01199.xml b/src/main/resources/data/stats/skills/01100-01199.xml index ddaed5e5a9..dd50ff96cc 100644 --- a/src/main/resources/data/stats/skills/01100-01199.xml +++ b/src/main/resources/data/stats/skills/01100-01199.xml @@ -825,13 +825,13 @@ <enchant2 name="mpConsume1" val="#ench2MpConsume1" /> <enchant2 name="mpConsume2" val="#ench2MpConsume2" /> <effects> - <effect name="HpByLevel"> + <effect name="InstantHpByLevelSelf"> <param power="#hpByLevelPower" /> </effect> <effect name="ConsumeBody" /> </effects> <enchant2Effects> - <effect name="HpByLevel"> + <effect name="InstantHpByLevelSelf"> <param power="#ench1hpByLevelPower" /> </effect> <effect name="ConsumeBody" /> diff --git a/src/main/resources/data/stats/skills/05800-05899.xml b/src/main/resources/data/stats/skills/05800-05899.xml index c6a830cc05..13190bbdc8 100644 --- a/src/main/resources/data/stats/skills/05800-05899.xml +++ b/src/main/resources/data/stats/skills/05800-05899.xml @@ -2046,7 +2046,7 @@ <set name="rideState" val="NONE" /> <set name="targetType" val="ENEMY_ONLY" /> <effects> - <effect name="HpByLevel"> + <effect name="InstantHpByLevelSelf"> <param power="73" /> </effect> <effect name="Debuff"> diff --git a/src/main/resources/data/stats/skills/06900-06999.xml b/src/main/resources/data/stats/skills/06900-06999.xml index 709b5d5bc4..0e950fd021 100644 --- a/src/main/resources/data/stats/skills/06900-06999.xml +++ b/src/main/resources/data/stats/skills/06900-06999.xml @@ -276,12 +276,17 @@ <set name="abnormalLvl" val="1" /> <set name="abnormalTime" val="10" /> <set name="abnormalType" val="PATIENCE" /> + <set name="affectScope" val="SINGLE" /> + <set name="hitCancelTime" val="500" /> <set name="icon" val="BranchSys2.icon.skill0952" /> <set name="isMagic" val="4" /> <set name="operateType" val="A2" /> <set name="rideState" val="NONE" /> <set name="targetType" val="SELF" /> <effects> + <effect name="Buff"> + <mul stat="pAtkSpd" val="1.03" /> + </effect> <effect name="Buff"> <mul stat="critDmg" val="1.1" /> </effect> @@ -291,9 +296,6 @@ <effect name="Buff"> <mul stat="pAtk" val="1.15" /> </effect> - <effect name="Buff"> - <mul stat="pAtkSpd" val="1.03" /> - </effect> <effect name="Buff"> <add stat="runSpd" val="5" /> </effect> diff --git a/src/main/resources/data/xsd/skills.xsd b/src/main/resources/data/xsd/skills.xsd index 559e642c81..c17cac3205 100644 --- a/src/main/resources/data/xsd/skills.xsd +++ b/src/main/resources/data/xsd/skills.xsd @@ -575,7 +575,6 @@ <xs:enumeration value="Heal" /> <xs:enumeration value="Hide" /> <xs:enumeration value="Hp" /> - <xs:enumeration value="HpByLevel" /> <xs:enumeration value="HpDrain" /> <xs:enumeration value="HpPerMax" /> <xs:enumeration value="ImmobileBuff" /> @@ -584,6 +583,8 @@ <xs:enumeration value="InstantCallTargetParty" /> <xs:enumeration value="InstantDespawn" /> <xs:enumeration value="InstantDispelByName" /> + <xs:enumeration value="InstantHpByLevelSelf" /> + <xs:enumeration value="InstantMpByLevelSelf" /> <xs:enumeration value="Lethal" /> <xs:enumeration value="Lucky" /> <xs:enumeration value="MagicalAttack" /> -- GitLab