瀏覽代碼

BETA: Reworking Sweeper to use retail like effects.
* Removed skill handler Sweep.
* Added effect Sweeper.
* Added effect !ConsumeBody.
* Added effect !MpByLevel.
* Added effect !HpByLevel.

Reviewed by: MELERIX

'''Note:''' There are more skills that uses this new effects and are implemented in different ways, this will be updated later.

Zoey76 12 年之前
父節點
當前提交
df53109a02

+ 8 - 0
L2J_DataPack_BETA/dist/game/data/scripts/handlers/EffectMasterHandler.java

@@ -43,6 +43,7 @@ import handlers.effecthandlers.CharmOfLuck;
 import handlers.effecthandlers.ClanGate;
 import handlers.effecthandlers.ConfuseMob;
 import handlers.effecthandlers.Confusion;
+import handlers.effecthandlers.ConsumeBody;
 import handlers.effecthandlers.CpDamPercent;
 import handlers.effecthandlers.CpHeal;
 import handlers.effecthandlers.CpHealOverTime;
@@ -64,6 +65,7 @@ import handlers.effecthandlers.Heal;
 import handlers.effecthandlers.HealOverTime;
 import handlers.effecthandlers.HealPercent;
 import handlers.effecthandlers.Hide;
+import handlers.effecthandlers.HpByLevel;
 import handlers.effecthandlers.ImmobileBuff;
 import handlers.effecthandlers.ImmobilePetBuff;
 import handlers.effecthandlers.IncreaseCharges;
@@ -73,6 +75,7 @@ import handlers.effecthandlers.ManaHeal;
 import handlers.effecthandlers.ManaHealByLevel;
 import handlers.effecthandlers.ManaHealOverTime;
 import handlers.effecthandlers.ManaHealPercent;
+import handlers.effecthandlers.MpByLevel;
 import handlers.effecthandlers.MpConsumePerLevel;
 import handlers.effecthandlers.Mute;
 import handlers.effecthandlers.Negate;
@@ -101,6 +104,7 @@ import handlers.effecthandlers.Spoil;
 import handlers.effecthandlers.Stun;
 import handlers.effecthandlers.SummonAgathion;
 import handlers.effecthandlers.SummonPet;
+import handlers.effecthandlers.Sweeper;
 import handlers.effecthandlers.TargetMe;
 import handlers.effecthandlers.ThrowUp;
 import handlers.effecthandlers.TransferDamage;
@@ -140,6 +144,7 @@ public final class EffectMasterHandler
 		ClanGate.class,
 		ConfuseMob.class,
 		Confusion.class,
+		ConsumeBody.class,
 		CpHeal.class,
 		CpHealOverTime.class,
 		CpHealPercent.class,
@@ -161,6 +166,7 @@ public final class EffectMasterHandler
 		HealPercent.class,
 		Heal.class,
 		Hide.class,
+		HpByLevel.class,
 		ImmobileBuff.class,
 		IncreaseCharges.class,
 		ImmobilePetBuff.class,
@@ -170,6 +176,7 @@ public final class EffectMasterHandler
 		ManaHealByLevel.class,
 		ManaHealOverTime.class,
 		ManaHealPercent.class,
+		MpByLevel.class,
 		MpConsumePerLevel.class,
 		Mute.class,
 		Negate.class,
@@ -197,6 +204,7 @@ public final class EffectMasterHandler
 		Stun.class,
 		SummonAgathion.class,
 		SummonPet.class,
+		Sweeper.class,
 		TargetMe.class,
 		ThrowUp.class,
 		TransferDamage.class,

+ 0 - 2
L2J_DataPack_BETA/dist/game/data/scripts/handlers/MasterHandler.java

@@ -244,7 +244,6 @@ import handlers.skillhandlers.Spoil;
 import handlers.skillhandlers.StealBuffs;
 import handlers.skillhandlers.StrSiegeAssault;
 import handlers.skillhandlers.SummonFriend;
-import handlers.skillhandlers.Sweep;
 import handlers.skillhandlers.TakeCastle;
 import handlers.skillhandlers.TakeFort;
 import handlers.skillhandlers.TransformDispel;
@@ -547,7 +546,6 @@ public class MasterHandler
 			Resurrect.class,
 			ShiftTarget.class,
 			Spoil.class,
-			Sweep.class,
 			StrSiegeAssault.class,
 			SummonFriend.class,
 			Disablers.class,

+ 60 - 0
L2J_DataPack_BETA/dist/game/data/scripts/handlers/effecthandlers/ConsumeBody.java

@@ -0,0 +1,60 @@
+/*
+ * Copyright (C) 2004-2013 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 handlers.effecthandlers;
+
+import com.l2jserver.gameserver.model.actor.L2Npc;
+import com.l2jserver.gameserver.model.effects.EffectTemplate;
+import com.l2jserver.gameserver.model.effects.L2Effect;
+import com.l2jserver.gameserver.model.effects.L2EffectType;
+import com.l2jserver.gameserver.model.stats.Env;
+
+/**
+ * Consume Body effect.
+ * @author Zoey76
+ */
+public class ConsumeBody extends L2Effect
+{
+	public ConsumeBody(Env env, EffectTemplate template)
+	{
+		super(env, template);
+	}
+	
+	@Override
+	public boolean onStart()
+	{
+		if ((getEffector() == null) || (getEffected() == null) || !getEffected().isNpc())
+		{
+			return false;
+		}
+		((L2Npc) getEffected()).endDecayTask();
+		return true;
+	}
+	
+	@Override
+	public boolean onActionTime()
+	{
+		return false;
+	}
+	
+	@Override
+	public L2EffectType getEffectType()
+	{
+		return L2EffectType.BUFF;
+	}
+}

+ 5 - 5
L2J_DataPack_BETA/dist/game/data/scripts/handlers/effecthandlers/Harvesting.java

@@ -20,12 +20,12 @@ package handlers.effecthandlers;
 
 import com.l2jserver.Config;
 import com.l2jserver.gameserver.model.L2Object;
-import com.l2jserver.gameserver.model.actor.L2Attackable.RewardItem;
 import com.l2jserver.gameserver.model.actor.instance.L2MonsterInstance;
 import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;
 import com.l2jserver.gameserver.model.effects.EffectTemplate;
 import com.l2jserver.gameserver.model.effects.L2Effect;
 import com.l2jserver.gameserver.model.effects.L2EffectType;
+import com.l2jserver.gameserver.model.holders.ItemHolder;
 import com.l2jserver.gameserver.model.stats.Env;
 import com.l2jserver.gameserver.network.SystemMessageId;
 import com.l2jserver.gameserver.network.serverpackets.InventoryUpdate;
@@ -85,12 +85,12 @@ public class Harvesting extends L2Effect
 			{
 				if (calcSuccess(player, monster))
 				{
-					final RewardItem[] items = monster.takeHarvest();
+					final ItemHolder[] items = monster.takeHarvest();
 					if ((items != null) && (items.length > 0))
 					{
-						for (RewardItem reward : items)
+						for (ItemHolder reward : items)
 						{
-							cropId = reward.getItemId(); // always got 1 type of crop as reward
+							cropId = reward.getId(); // always got 1 type of crop as reward
 							if (player.isInParty())
 							{
 								player.getParty().distributeItem(player, reward, true, monster);
@@ -99,7 +99,7 @@ public class Harvesting extends L2Effect
 							{
 								if (iu != null)
 								{
-									iu.addItem(player.getInventory().addItem("Harvesting", reward.getItemId(), reward.getCount(), player, monster));
+									iu.addItem(player.getInventory().addItem("Harvesting", reward.getId(), reward.getCount(), player, monster));
 								}
 								send = true;
 								total += reward.getCount();

+ 74 - 0
L2J_DataPack_BETA/dist/game/data/scripts/handlers/effecthandlers/HpByLevel.java

@@ -0,0 +1,74 @@
+/*
+ * Copyright (C) 2004-2013 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 handlers.effecthandlers;
+
+import com.l2jserver.gameserver.model.effects.EffectTemplate;
+import com.l2jserver.gameserver.model.effects.L2Effect;
+import com.l2jserver.gameserver.model.effects.L2EffectType;
+import com.l2jserver.gameserver.model.stats.Env;
+import com.l2jserver.gameserver.network.SystemMessageId;
+import com.l2jserver.gameserver.network.serverpackets.StatusUpdate;
+import com.l2jserver.gameserver.network.serverpackets.SystemMessage;
+
+/**
+ * Hp By Level effect.
+ * @author Zoey76
+ */
+public class HpByLevel extends L2Effect
+{
+	public HpByLevel(Env env, EffectTemplate template)
+	{
+		super(env, template);
+	}
+	
+	@Override
+	public boolean onStart()
+	{
+		if ((getEffector() == null) || (getEffected() == null))
+		{
+			return false;
+		}
+		// Calculation
+		final int abs = (int) calc();
+		final double absorb = ((getEffected().getCurrentHp() + abs) > getEffected().getMaxHp() ? getEffected().getMaxHp() : (getEffected().getCurrentHp() + abs));
+		final int restored = (int) (absorb - getEffected().getCurrentHp());
+		getEffected().setCurrentHp(absorb);
+		// Status update
+		final StatusUpdate su = new StatusUpdate(getEffected());
+		su.addAttribute(StatusUpdate.CUR_HP, (int) absorb);
+		getEffected().sendPacket(su);
+		// System message
+		final SystemMessage sm = SystemMessage.getSystemMessage(SystemMessageId.S1_HP_RESTORED);
+		sm.addNumber(restored);
+		getEffected().sendPacket(sm);
+		return true;
+	}
+	
+	@Override
+	public boolean onActionTime()
+	{
+		return false;
+	}
+	
+	@Override
+	public L2EffectType getEffectType()
+	{
+		return L2EffectType.BUFF;
+	}
+}

+ 74 - 0
L2J_DataPack_BETA/dist/game/data/scripts/handlers/effecthandlers/MpByLevel.java

@@ -0,0 +1,74 @@
+/*
+ * Copyright (C) 2004-2013 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 handlers.effecthandlers;
+
+import com.l2jserver.gameserver.model.effects.EffectTemplate;
+import com.l2jserver.gameserver.model.effects.L2Effect;
+import com.l2jserver.gameserver.model.effects.L2EffectType;
+import com.l2jserver.gameserver.model.stats.Env;
+import com.l2jserver.gameserver.network.SystemMessageId;
+import com.l2jserver.gameserver.network.serverpackets.StatusUpdate;
+import com.l2jserver.gameserver.network.serverpackets.SystemMessage;
+
+/**
+ * Mp By Level effect.
+ * @author Zoey76
+ */
+public class MpByLevel extends L2Effect
+{
+	public MpByLevel(Env env, EffectTemplate template)
+	{
+		super(env, template);
+	}
+	
+	@Override
+	public boolean onStart()
+	{
+		if ((getEffector() == null) || (getEffected() == null))
+		{
+			return false;
+		}
+		// Calculation
+		final int abs = (int) calc();
+		final double absorb = ((getEffected().getCurrentMp() + abs) > getEffected().getMaxMp() ? getEffected().getMaxMp() : (getEffected().getCurrentMp() + abs));
+		final int restored = (int) (absorb - getEffected().getCurrentMp());
+		getEffected().setCurrentMp(absorb);
+		// Status update
+		final StatusUpdate su = new StatusUpdate(getEffected());
+		su.addAttribute(StatusUpdate.CUR_MP, (int) absorb);
+		getEffected().sendPacket(su);
+		// System message
+		final SystemMessage sm = SystemMessage.getSystemMessage(SystemMessageId.S1_MP_RESTORED);
+		sm.addNumber(restored);
+		getEffected().sendPacket(sm);
+		return true;
+	}
+	
+	@Override
+	public boolean onActionTime()
+	{
+		return false;
+	}
+	
+	@Override
+	public L2EffectType getEffectType()
+	{
+		return L2EffectType.BUFF;
+	}
+}

+ 98 - 0
L2J_DataPack_BETA/dist/game/data/scripts/handlers/effecthandlers/Sweeper.java

@@ -0,0 +1,98 @@
+/*
+ * Copyright (C) 2004-2013 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 handlers.effecthandlers;
+
+import com.l2jserver.gameserver.model.actor.L2Attackable;
+import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;
+import com.l2jserver.gameserver.model.effects.EffectTemplate;
+import com.l2jserver.gameserver.model.effects.L2Effect;
+import com.l2jserver.gameserver.model.effects.L2EffectType;
+import com.l2jserver.gameserver.model.holders.ItemHolder;
+import com.l2jserver.gameserver.model.stats.Env;
+
+/**
+ * Sweeper effect.
+ * @author Zoey76
+ */
+public class Sweeper extends L2Effect
+{
+	private static final int MAX_SWEEPER_TIME = 15000;
+	
+	public Sweeper(Env env, EffectTemplate template)
+	{
+		super(env, template);
+	}
+	
+	@Override
+	public boolean onStart()
+	{
+		if ((getEffector() == null) || (getEffected() == null) || !getEffector().isPlayer() || !getEffected().isL2Attackable())
+		{
+			return false;
+		}
+		
+		final L2PcInstance player = getEffector().getActingPlayer();
+		final L2Attackable monster = (L2Attackable) getEffected();
+		if (!monster.checkSpoilOwner(player, false))
+		{
+			return false;
+		}
+		
+		if (monster.isOldCorpse(player, MAX_SWEEPER_TIME, false))
+		{
+			return false;
+		}
+		
+		if (player.getInventory().checkInventorySlotsAndWeight(monster.getSpoilLootItems(), false, false))
+		{
+			return false;
+		}
+		
+		ItemHolder[] items = monster.takeSweep();
+		if ((items == null) || (items.length == 0))
+		{
+			return false;
+		}
+		
+		for (ItemHolder item : items)
+		{
+			if (player.isInParty())
+			{
+				player.getParty().distributeItem(player, item, true, monster);
+			}
+			else
+			{
+				player.addItem("Sweeper", item, player, true);
+			}
+		}
+		return true;
+	}
+	
+	@Override
+	public boolean onActionTime()
+	{
+		return false;
+	}
+	
+	@Override
+	public L2EffectType getEffectType()
+	{
+		return L2EffectType.BUFF;
+	}
+}

+ 0 - 141
L2J_DataPack_BETA/dist/game/data/scripts/handlers/skillhandlers/Sweep.java

@@ -1,141 +0,0 @@
-/*
- * Copyright (C) 2004-2013 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 handlers.skillhandlers;
-
-import com.l2jserver.gameserver.handler.ISkillHandler;
-import com.l2jserver.gameserver.model.L2Object;
-import com.l2jserver.gameserver.model.actor.L2Attackable;
-import com.l2jserver.gameserver.model.actor.L2Attackable.RewardItem;
-import com.l2jserver.gameserver.model.actor.L2Character;
-import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;
-import com.l2jserver.gameserver.model.skills.L2Skill;
-import com.l2jserver.gameserver.model.skills.L2SkillType;
-import com.l2jserver.gameserver.model.skills.l2skills.L2SkillSweeper;
-import com.l2jserver.gameserver.network.SystemMessageId;
-import com.l2jserver.gameserver.network.serverpackets.StatusUpdate;
-import com.l2jserver.gameserver.network.serverpackets.SystemMessage;
-
-/**
- * @author _drunk_, Zoey76
- */
-public class Sweep implements ISkillHandler
-{
-	private static final L2SkillType[] SKILL_IDS =
-	{
-		L2SkillType.SWEEP
-	};
-	private static final int maxSweepTime = 15000;
-	
-	@Override
-	public void useSkill(L2Character activeChar, L2Skill skill, L2Object[] targets)
-	{
-		if (!activeChar.isPlayer())
-		{
-			return;
-		}
-		final L2PcInstance player = activeChar.getActingPlayer();
-		
-		RewardItem[] items = null;
-		L2Attackable target;
-		L2SkillSweeper sweep;
-		SystemMessage sm;
-		boolean canSweep;
-		boolean isSweeping;
-		for (L2Object tgt : targets)
-		{
-			if (!tgt.isL2Attackable())
-			{
-				continue;
-			}
-			target = (L2Attackable) tgt;
-			
-			canSweep = target.checkSpoilOwner(player, true);
-			canSweep &= target.checkCorpseTime(player, maxSweepTime, true);
-			canSweep &= player.getInventory().checkInventorySlotsAndWeight(target.getSpoilLootItems(), true, false);
-			
-			if (canSweep)
-			{
-				isSweeping = false;
-				synchronized (target)
-				{
-					if (target.isSweepActive())
-					{
-						items = target.takeSweep();
-						isSweeping = true;
-					}
-				}
-				if (isSweeping)
-				{
-					if ((items == null) || (items.length == 0))
-					{
-						continue;
-					}
-					for (RewardItem ritem : items)
-					{
-						if (player.isInParty())
-						{
-							player.getParty().distributeItem(player, ritem, true, target);
-						}
-						else
-						{
-							player.addItem("Sweep", ritem.getItemId(), ritem.getCount(), player, true);
-						}
-					}
-				}
-			}
-			target.endDecayTask();
-			
-			sweep = (L2SkillSweeper) skill;
-			if (sweep.getAbsorbAbs() != -1)
-			{
-				int restored = 0;
-				double absorb = 0;
-				final StatusUpdate su = new StatusUpdate(activeChar);
-				final int abs = sweep.getAbsorbAbs();
-				if (sweep.isAbsorbHp())
-				{
-					absorb = ((activeChar.getCurrentHp() + abs) > activeChar.getMaxHp() ? activeChar.getMaxHp() : (activeChar.getCurrentHp() + abs));
-					restored = (int) (absorb - activeChar.getCurrentHp());
-					activeChar.setCurrentHp(absorb);
-					
-					su.addAttribute(StatusUpdate.CUR_HP, (int) absorb);
-					sm = SystemMessage.getSystemMessage(SystemMessageId.S1_HP_RESTORED);
-				}
-				else
-				{
-					absorb = ((activeChar.getCurrentMp() + abs) > activeChar.getMaxMp() ? activeChar.getMaxMp() : (activeChar.getCurrentMp() + abs));
-					restored = (int) (absorb - activeChar.getCurrentMp());
-					activeChar.setCurrentMp(absorb);
-					
-					su.addAttribute(StatusUpdate.CUR_MP, (int) absorb);
-					sm = SystemMessage.getSystemMessage(SystemMessageId.S1_MP_RESTORED);
-				}
-				activeChar.sendPacket(su);
-				sm.addNumber(restored);
-				activeChar.sendPacket(sm);
-			}
-		}
-	}
-	
-	@Override
-	public L2SkillType[] getSkillIds()
-	{
-		return SKILL_IDS;
-	}
-}

+ 1 - 1
L2J_DataPack_BETA/dist/game/data/scripts/handlers/targethandlers/TargetCorpseMob.java

@@ -62,7 +62,7 @@ public class TargetCorpseMob implements ITargetTypeHandler
 			}
 			case DRAIN:
 			{
-				if (!((L2Attackable) target).checkCorpseTime(activeChar.getActingPlayer(), (Config.NPC_DECAY_TIME / 2), true))
+				if (((L2Attackable) target).isOldCorpse(activeChar.getActingPlayer(), (Config.NPC_DECAY_TIME / 2), true))
 				{
 					return _emptyTargetList;
 				}

+ 11 - 7
L2J_DataPack_BETA/dist/game/data/stats/skills/00000-00099.xml

@@ -1007,25 +1007,29 @@
 		<table name="#enchantMagicLvl"> 76 76 76 77 77 77 78 78 78 79 79 79 80 80 80 81 81 81 82 82 82 83 83 83 84 84 84 85 85 85 </table>
 		<table name="#ench1DrainHp"> 3 6 9 12 15 18 21 24 27 30 33 36 39 42 45 48 51 54 57 60 63 66 69 72 75 78 81 84 87 90 </table>
 		<table name="#ench2DrainMp"> 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 </table>
-		<set name="isMagic" val="2" /> <!-- Static Skill -->
 		<set name="castRange" val="20" />
 		<set name="effectRange" val="400" />
 		<set name="hitTime" val="500" />
+		<set name="isMagic" val="2" /> <!-- Static Skill -->
 		<set name="magicLvl" val="10" />
 		<set name="mpConsume" val="3" />
 		<set name="operateType" val="A1" />
 		<set name="reuseDelay" val="500" />
-		<set name="skillType" val="SWEEP" />
 		<set name="target" val="TARGET_CORPSE_MOB" />
-		<!-- Drain-specific: absorb from a mob's corpse -->
-		<enchant1 name="absorbAbs" val="#ench1DrainHp" />
-		<enchant1 name="absorbHp" val="true" />
 		<enchant1 name="magicLvl" val="#enchantMagicLvl" />
 		<enchant1 name="reuseDelay" val="0" />
-		<enchant2 name="absorbAbs" val="#ench2DrainMp" />
-		<enchant2 name="absorbHp" val="false" />
 		<enchant2 name="magicLvl" val="#enchantMagicLvl" />
 		<enchant2 name="reuseDelay" val="0" />
+		<for>
+			<effect name="Sweeper" noicon="1" val="0" />
+			<effect name="ConsumeBody" noicon="1" val="0" />
+		</for>
+		<enchant1for>
+			<effect self="1" name="HpByLevel" noicon="1" val="#ench1DrainHp" />
+		</enchant1for>
+		<enchant1for>
+			<effect self="1" name="MpByLevel" noicon="1" val="#ench2DrainMp" />
+		</enchant1for>
 		<cond>
 			<player canSweep="true" />
 		</cond>

+ 4 - 1
L2J_DataPack_BETA/dist/game/data/stats/skills/00400-00499.xml

@@ -1511,8 +1511,11 @@
 		<set name="operateType" val="A1" />
 		<set name="reuseDelay" val="3000" />
 		<set name="affectRange" val="200" />
-		<set name="skillType" val="SWEEP" />
 		<set name="target" val="TARGET_AURA_CORPSE_MOB" />
+		<for>
+			<effect name="Sweeper" noicon="1" val="0" />
+			<effect name="ConsumeBody" noicon="1" val="0" />
+		</for>
 	</skill>
 	<skill id="445" levels="1" name="Mirage">
 		<!-- Confirmed CT2.5 -->