Quellcode durchsuchen

BETA: DP-Part [L5072] and fix for Hero's Potion

Rumen Nikiforov vor 13 Jahren
Ursprung
Commit
06d45f8cc8

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

@@ -32,6 +32,7 @@ import handlers.effecthandlers.EffectCombatPointHealOverTime;
 import handlers.effecthandlers.EffectConfuseMob;
 import handlers.effecthandlers.EffectConfusion;
 import handlers.effecthandlers.EffectCpDamPercent;
+import handlers.effecthandlers.EffectCpHeal;
 import handlers.effecthandlers.EffectCpHealPercent;
 import handlers.effecthandlers.EffectDamOverTime;
 import handlers.effecthandlers.EffectDebuff;
@@ -42,6 +43,7 @@ import handlers.effecthandlers.EffectFakeDeath;
 import handlers.effecthandlers.EffectFear;
 import handlers.effecthandlers.EffectFusion;
 import handlers.effecthandlers.EffectGrow;
+import handlers.effecthandlers.EffectHeal;
 import handlers.effecthandlers.EffectHealOverTime;
 import handlers.effecthandlers.EffectHealPercent;
 import handlers.effecthandlers.EffectHide;
@@ -50,6 +52,7 @@ import handlers.effecthandlers.EffectImmobilePetBuff;
 import handlers.effecthandlers.EffectIncreaseCharges;
 import handlers.effecthandlers.EffectInvincible;
 import handlers.effecthandlers.EffectManaDamOverTime;
+import handlers.effecthandlers.EffectManaHeal;
 import handlers.effecthandlers.EffectManaHealOverTime;
 import handlers.effecthandlers.EffectManaHealPercent;
 import handlers.effecthandlers.EffectMpConsumePerLevel;
@@ -109,6 +112,7 @@ public final class EffectMasterHandler
 		EffectHandler.getInstance().registerHandler("Confusion", EffectConfusion.class);
 		EffectHandler.getInstance().registerHandler("CpDamPercent", EffectCpDamPercent.class);
 		EffectHandler.getInstance().registerHandler("CpHealPercent", EffectCpHealPercent.class);
+		EffectHandler.getInstance().registerHandler("CpHeal", EffectCpHeal.class);
 		EffectHandler.getInstance().registerHandler("DamOverTime", EffectDamOverTime.class);
 		EffectHandler.getInstance().registerHandler("Debuff", EffectDebuff.class);
 		EffectHandler.getInstance().registerHandler("DispelBySlot", EffectDispelBySlot.class);
@@ -120,6 +124,7 @@ public final class EffectMasterHandler
 		EffectHandler.getInstance().registerHandler("Grow", EffectGrow.class);
 		EffectHandler.getInstance().registerHandler("HealOverTime", EffectHealOverTime.class);
 		EffectHandler.getInstance().registerHandler("HealPercent", EffectHealPercent.class);
+		EffectHandler.getInstance().registerHandler("Heal", EffectHeal.class);
 		EffectHandler.getInstance().registerHandler("Hide", EffectHide.class);
 		EffectHandler.getInstance().registerHandler("ImmobileBuff", EffectImmobileBuff.class);
 		EffectHandler.getInstance().registerHandler("IncreaseCharges", EffectIncreaseCharges.class);
@@ -128,6 +133,7 @@ public final class EffectMasterHandler
 		EffectHandler.getInstance().registerHandler("ManaDamOverTime", EffectManaDamOverTime.class);
 		EffectHandler.getInstance().registerHandler("ManaHealOverTime", EffectManaHealOverTime.class);
 		EffectHandler.getInstance().registerHandler("ManaHealPercent", EffectManaHealPercent.class);
+		EffectHandler.getInstance().registerHandler("ManaHeal", EffectManaHeal.class);
 		EffectHandler.getInstance().registerHandler("MpConsumePerLevel", EffectMpConsumePerLevel.class);
 		EffectHandler.getInstance().registerHandler("Mute", EffectMute.class);
 		EffectHandler.getInstance().registerHandler("Negate", EffectNegate.class);

+ 67 - 0
L2J_DataPack_BETA/dist/game/data/scripts/handlers/effecthandlers/EffectCpHeal.java

@@ -0,0 +1,67 @@
+/**
+ * 
+ */
+package handlers.effecthandlers;
+
+import com.l2jserver.gameserver.model.L2Effect;
+import com.l2jserver.gameserver.model.actor.L2Character;
+import com.l2jserver.gameserver.model.actor.instance.L2DoorInstance;
+import com.l2jserver.gameserver.network.SystemMessageId;
+import com.l2jserver.gameserver.network.serverpackets.StatusUpdate;
+import com.l2jserver.gameserver.network.serverpackets.SystemMessage;
+import com.l2jserver.gameserver.skills.Env;
+import com.l2jserver.gameserver.templates.effects.EffectTemplate;
+import com.l2jserver.gameserver.templates.skills.L2EffectType;
+
+/**
+ * @author UnAfraid
+ *
+ */
+public class EffectCpHeal extends L2Effect
+{
+	public EffectCpHeal(Env env, EffectTemplate template)
+	{
+		super(env, template);
+	}
+	
+	@Override
+	public L2EffectType getEffectType()
+	{
+		return L2EffectType.CPHEAL;
+	}
+	
+	@Override
+	public boolean onStart()
+	{
+		L2Character target = getEffected();
+		if (target == null || target.isDead() || target instanceof L2DoorInstance)
+			return false;
+		StatusUpdate su = new StatusUpdate(target);
+		
+		double amount = calc();
+		
+		amount = Math.min(amount, target.getMaxRecoverableCp() - target.getCurrentCp());
+		
+		// Prevent negative amounts
+		if (amount < 0)
+			amount = 0;
+		
+		// To prevent -value heals, set the value only if current Cp is less than max recoverable.
+		if (target.getCurrentCp() < target.getMaxRecoverableCp())
+			target.setCurrentCp(amount + target.getCurrentCp());
+		
+		SystemMessage sm = SystemMessage.getSystemMessage(SystemMessageId.S1_CP_WILL_BE_RESTORED);
+		sm.addNumber((int) amount);
+		target.sendPacket(sm);
+		su.addAttribute(StatusUpdate.CUR_CP, (int) target.getCurrentCp());
+		target.sendPacket(su);
+		
+		return true;
+	}
+	
+	@Override
+	public boolean onActionTime()
+	{
+		return false;
+	}
+}

+ 77 - 0
L2J_DataPack_BETA/dist/game/data/scripts/handlers/effecthandlers/EffectHeal.java

@@ -0,0 +1,77 @@
+/**
+ * 
+ */
+package handlers.effecthandlers;
+
+import com.l2jserver.gameserver.model.L2Effect;
+import com.l2jserver.gameserver.model.actor.L2Character;
+import com.l2jserver.gameserver.model.actor.instance.L2DoorInstance;
+import com.l2jserver.gameserver.network.SystemMessageId;
+import com.l2jserver.gameserver.network.serverpackets.StatusUpdate;
+import com.l2jserver.gameserver.network.serverpackets.SystemMessage;
+import com.l2jserver.gameserver.skills.Env;
+import com.l2jserver.gameserver.templates.effects.EffectTemplate;
+import com.l2jserver.gameserver.templates.skills.L2EffectType;
+
+/**
+ * @author UnAfraid
+ *
+ */
+public class EffectHeal extends L2Effect
+{
+	public EffectHeal(Env env, EffectTemplate template)
+	{
+		super(env, template);
+	}
+
+	
+	@Override
+	public L2EffectType getEffectType()
+	{
+		return L2EffectType.HEAL;
+	}
+	
+	@Override
+	public boolean onStart()
+	{
+		L2Character target = getEffected();
+		if (target == null || target.isDead() || target instanceof L2DoorInstance)
+			return false;
+		
+		StatusUpdate su = new StatusUpdate(target);
+		
+		double amount = calc();
+		
+		amount = Math.min(amount, target.getMaxRecoverableHp() - target.getCurrentHp());
+		
+		// Prevent negative amounts
+		if (amount < 0)
+			amount = 0;
+		
+		// To prevent -value heals, set the value only if current hp is less than max recoverable.
+		if (target.getCurrentHp() < target.getMaxRecoverableHp())
+			target.setCurrentHp(amount + target.getCurrentHp());
+		
+		SystemMessage sm;
+		if (getEffector().getObjectId() != target.getObjectId())
+		{
+			sm = SystemMessage.getSystemMessage(SystemMessageId.S2_HP_RESTORED_BY_C1);
+			sm.addCharName(getEffector());
+		}
+		else
+			sm = SystemMessage.getSystemMessage(SystemMessageId.S1_HP_RESTORED);
+		
+		sm.addNumber((int)amount);
+		target.sendPacket(sm);
+		su.addAttribute(StatusUpdate.CUR_HP, (int) target.getCurrentHp());
+		target.sendPacket(su);
+		
+		return true;
+	}
+	
+	@Override
+	public boolean onActionTime()
+	{
+		return false;
+	}
+}

+ 75 - 0
L2J_DataPack_BETA/dist/game/data/scripts/handlers/effecthandlers/EffectManaHeal.java

@@ -0,0 +1,75 @@
+/**
+ * 
+ */
+package handlers.effecthandlers;
+
+import com.l2jserver.gameserver.model.L2Effect;
+import com.l2jserver.gameserver.model.actor.L2Character;
+import com.l2jserver.gameserver.model.actor.instance.L2DoorInstance;
+import com.l2jserver.gameserver.network.SystemMessageId;
+import com.l2jserver.gameserver.network.serverpackets.StatusUpdate;
+import com.l2jserver.gameserver.network.serverpackets.SystemMessage;
+import com.l2jserver.gameserver.skills.Env;
+import com.l2jserver.gameserver.templates.effects.EffectTemplate;
+import com.l2jserver.gameserver.templates.skills.L2EffectType;
+
+/**
+ * @author UnAfraid
+ *
+ */
+public class EffectManaHeal extends L2Effect
+{
+	public EffectManaHeal(Env env, EffectTemplate template)
+	{
+		super(env, template);
+	}
+	
+	@Override
+	public L2EffectType getEffectType()
+	{
+		return L2EffectType.MANAHEAL;
+	}
+	
+	@Override
+	public boolean onStart()
+	{
+		L2Character target = getEffected();
+		if (target == null || target.isDead() || target instanceof L2DoorInstance)
+			return false;
+	
+		StatusUpdate su = new StatusUpdate(target);
+		
+		double amount = calc();
+		
+		amount = Math.min(amount, target.getMaxRecoverableMp() - target.getCurrentMp());
+		
+		// Prevent negative amounts
+		if (amount < 0)
+			amount = 0;
+		
+		// To prevent -value heals, set the value only if current mp is less than max recoverable.
+		if (target.getCurrentMp() < target.getMaxRecoverableMp())
+			target.setCurrentMp(amount + target.getCurrentMp());
+		
+		SystemMessage sm;
+		if (getEffector().getObjectId() != target.getObjectId())
+		{
+			sm = SystemMessage.getSystemMessage(SystemMessageId.S2_MP_RESTORED_BY_C1);
+			sm.addCharName(getEffector());
+		}
+		else
+			sm = SystemMessage.getSystemMessage(SystemMessageId.S1_MP_RESTORED);
+		sm.addNumber((int) amount);
+		target.sendPacket(sm);
+		su.addAttribute(StatusUpdate.CUR_MP, (int) target.getCurrentMp());
+		target.sendPacket(su);
+		
+		return true;
+	}
+	
+	@Override
+	public boolean onActionTime()
+	{
+		return false;
+	}
+}

+ 10 - 3
L2J_DataPack_BETA/dist/game/data/stats/skills/22100-22199.xml

@@ -976,10 +976,17 @@
 		<set name="operateType" val="OP_PASSIVE" />
 	</skill>
 	<skill id="22178" levels="1" name="Hero's Potion">
-		<set name="target" val="TARGET_NONE" />
-		<set name="skillType" val="NOTDONE" />
-		<set name="operateType" val="OP_PASSIVE" />
+		<!-- Confirmed CT2.5 -->
+		<set name="itemConsumeCount" val="1" />
+		<set name="magicLvl" val="1" />
+		<set name="operateType" val="OP_ACTIVE" />
+		<set name="skillType" val="DUMMY" />
+		<set name="target" val="TARGET_SELF" />
 		<set name="reuseDelay" val="60000" />
+		<for>
+			<effect name="Heal" noicon="1" val="500" />
+			<effect name="ManaHeal" noicon="1" val="200" />
+		</for>
 	</skill>
 	<skill id="22179" levels="1" name="Fortuna of Chaos">
 		<!-- Confirmed CT2.5 -->