浏览代码

BETA: Half-Kill is now possible against monsters in h5.

Rumen Nikiforov 13 年之前
父节点
当前提交
56adaf9cd3

+ 8 - 0
L2J_Server_BETA/java/com/l2jserver/gameserver/model/actor/L2Character.java

@@ -36,6 +36,7 @@ import com.l2jserver.gameserver.ai.CtrlEvent;
 import com.l2jserver.gameserver.ai.CtrlIntention;
 import com.l2jserver.gameserver.ai.CtrlIntention;
 import com.l2jserver.gameserver.ai.L2AttackableAI;
 import com.l2jserver.gameserver.ai.L2AttackableAI;
 import com.l2jserver.gameserver.ai.L2CharacterAI;
 import com.l2jserver.gameserver.ai.L2CharacterAI;
+import com.l2jserver.gameserver.datatables.AccessLevels;
 import com.l2jserver.gameserver.datatables.DoorTable;
 import com.l2jserver.gameserver.datatables.DoorTable;
 import com.l2jserver.gameserver.datatables.ItemTable;
 import com.l2jserver.gameserver.datatables.ItemTable;
 import com.l2jserver.gameserver.datatables.SkillTable;
 import com.l2jserver.gameserver.datatables.SkillTable;
@@ -51,6 +52,7 @@ import com.l2jserver.gameserver.model.ChanceSkillList;
 import com.l2jserver.gameserver.model.CharEffectList;
 import com.l2jserver.gameserver.model.CharEffectList;
 import com.l2jserver.gameserver.model.FusionSkill;
 import com.l2jserver.gameserver.model.FusionSkill;
 import com.l2jserver.gameserver.model.IChanceSkillTrigger;
 import com.l2jserver.gameserver.model.IChanceSkillTrigger;
+import com.l2jserver.gameserver.model.L2AccessLevel;
 import com.l2jserver.gameserver.model.L2CharPosition;
 import com.l2jserver.gameserver.model.L2CharPosition;
 import com.l2jserver.gameserver.model.L2Object;
 import com.l2jserver.gameserver.model.L2Object;
 import com.l2jserver.gameserver.model.L2Party;
 import com.l2jserver.gameserver.model.L2Party;
@@ -341,6 +343,12 @@ public abstract class L2Character extends L2Object
 		return false;
 		return false;
 	}
 	}
 	
 	
+	// Overrided in L2PcInstance
+	public L2AccessLevel getAccessLevel()
+	{
+		return null;
+	}
+	
 	// =========================================================
 	// =========================================================
 	// Constructor
 	// Constructor
 	/**
 	/**

+ 15 - 22
L2J_Server_BETA/java/com/l2jserver/gameserver/model/stats/Formulas.java

@@ -2214,25 +2214,21 @@ public final class Formulas
 	
 	
 	public static final boolean calcLethalHit(L2Character activeChar, L2Character target, L2Skill skill)
 	public static final boolean calcLethalHit(L2Character activeChar, L2Character target, L2Skill skill)
 	{
 	{
-		if (!target.isRaid() && !(target instanceof L2DoorInstance) && !((target instanceof L2Npc) && (((L2Npc) target).getNpcId() == 35062)))
+		if (!target.isRaid() && !target.isInvul() && !(target.isDoor()) && !((target.isNpc()) && (((L2Npc) target).getNpcId() == 35062)))
 		{
 		{
-			// activeChar.sendMessage(Double.toString(chance));
-			// activeChar.sendMessage(Double.toString(calcLethal(activeChar, target, skill.getLethalChance2(),skill.getMagicLevel())));
-			// activeChar.sendMessage(Double.toString(calcLethal(activeChar, target, skill.getLethalChance1(),skill.getMagicLevel())));
-			
 			// 2nd lethal effect activate (cp,hp to 1 or if target is npc then hp to 1)
 			// 2nd lethal effect activate (cp,hp to 1 or if target is npc then hp to 1)
 			if ((skill.getLethalChance2() > 0) && (Rnd.get(1000) < calcLethal(activeChar, target, skill.getLethalChance2(), skill.getMagicLevel())))
 			if ((skill.getLethalChance2() > 0) && (Rnd.get(1000) < calcLethal(activeChar, target, skill.getLethalChance2(), skill.getMagicLevel())))
 			{
 			{
-				if (target instanceof L2Npc)
+				if (target.isNpc())
 				{
 				{
 					target.reduceCurrentHp(target.getCurrentHp() - 1, activeChar, skill);
 					target.reduceCurrentHp(target.getCurrentHp() - 1, activeChar, skill);
 				}
 				}
-				else if (target instanceof L2PcInstance) // If is a active player set his HP and CP to 1
+				else if (target.isPlayer()) // If is a active player set his HP and CP to 1
 				{
 				{
 					L2PcInstance player = (L2PcInstance) target;
 					L2PcInstance player = (L2PcInstance) target;
 					if (!player.isInvul())
 					if (!player.isInvul())
 					{
 					{
-						if (!((activeChar instanceof L2PcInstance) && (((L2PcInstance) activeChar).isGM() && !((L2PcInstance) activeChar).getAccessLevel().canGiveDamage())))
+						if (!(activeChar.isPlayer() && (activeChar.isGM() && !activeChar.getAccessLevel().canGiveDamage())))
 						{
 						{
 							player.setCurrentHp(1);
 							player.setCurrentHp(1);
 							player.setCurrentCp(1);
 							player.setCurrentCp(1);
@@ -2244,24 +2240,21 @@ public final class Formulas
 			}
 			}
 			else if ((skill.getLethalChance1() > 0) && (Rnd.get(1000) < calcLethal(activeChar, target, skill.getLethalChance1(), skill.getMagicLevel())))
 			else if ((skill.getLethalChance1() > 0) && (Rnd.get(1000) < calcLethal(activeChar, target, skill.getLethalChance1(), skill.getMagicLevel())))
 			{
 			{
-				if (target instanceof L2PcInstance)
+				if (target.isMonster())
 				{
 				{
-					L2PcInstance player = (L2PcInstance) target;
-					if (!player.isInvul())
+					target.reduceCurrentHp(target.getCurrentHp() / 2, activeChar, skill);
+					activeChar.sendPacket(SystemMessageId.HALF_KILL);
+				}
+				else if (target.isPlayer())
+				{
+					L2PcInstance player = target.getActingPlayer();
+					if (!((activeChar.isPlayer()) && (activeChar.isGM() && !activeChar.getAccessLevel().canGiveDamage())))
 					{
 					{
-						if (!((activeChar instanceof L2PcInstance) && (((L2PcInstance) activeChar).isGM() && !((L2PcInstance) activeChar).getAccessLevel().canGiveDamage())))
-						{
-							player.setCurrentCp(1); // Set CP to 1
-							player.sendPacket(SystemMessageId.CP_DISAPPEARS_WHEN_HIT_WITH_A_HALF_KILL_SKILL);
-							activeChar.sendPacket(SystemMessageId.CP_SIPHON);
-						}
+						player.setCurrentCp(1); // Set CP to 1
+						player.sendPacket(SystemMessageId.CP_DISAPPEARS_WHEN_HIT_WITH_A_HALF_KILL_SKILL);
+						activeChar.sendPacket(SystemMessageId.HALF_KILL);
 					}
 					}
 				}
 				}
-				// TODO: remove half kill since SYSMsg got changed.
-				/*
-				 * else if (target instanceof L2Npc) // If is a monster remove first damage and after 50% of current hp target.reduceCurrentHp(target.getCurrentHp() / 2, activeChar, skill);
-				 */
-				
 			}
 			}
 			else
 			else
 			{
 			{

+ 3 - 3
L2J_Server_BETA/java/com/l2jserver/gameserver/network/SystemMessageId.java

@@ -13542,9 +13542,9 @@ public final class SystemMessageId
 	
 	
 	/**
 	/**
 	 * ID: 2336<br>
 	 * ID: 2336<br>
-	 * Message: CP Siphon!
+	 * Message: Half-Kill!
 	 */
 	 */
-	public static final SystemMessageId CP_SIPHON;
+	public static final SystemMessageId HALF_KILL;
 	
 	
 	/**
 	/**
 	 * ID: 2337<br>
 	 * ID: 2337<br>
@@ -17143,7 +17143,7 @@ public final class SystemMessageId
 		NOT_ENOUGH_FAME_POINTS = new SystemMessageId(2327);
 		NOT_ENOUGH_FAME_POINTS = new SystemMessageId(2327);
 		YOU_CANNOT_RECEIVE_THE_VITAMIN_ITEM = new SystemMessageId(2333);
 		YOU_CANNOT_RECEIVE_THE_VITAMIN_ITEM = new SystemMessageId(2333);
 		THERE_ARE_NO_MORE_VITAMIN_ITEMS_TO_BE_FOUND = new SystemMessageId(2335);
 		THERE_ARE_NO_MORE_VITAMIN_ITEMS_TO_BE_FOUND = new SystemMessageId(2335);
-		CP_SIPHON = new SystemMessageId(2336);
+		HALF_KILL = new SystemMessageId(2336);
 		CP_DISAPPEARS_WHEN_HIT_WITH_A_HALF_KILL_SKILL = new SystemMessageId(2337);
 		CP_DISAPPEARS_WHEN_HIT_WITH_A_HALF_KILL_SKILL = new SystemMessageId(2337);
 		YOU_CANNOT_USE_MY_TELEPORTS_DURING_A_BATTLE = new SystemMessageId(2348);
 		YOU_CANNOT_USE_MY_TELEPORTS_DURING_A_BATTLE = new SystemMessageId(2348);
 		YOU_CANNOT_USE_MY_TELEPORTS_WHILE_PARTICIPATING = new SystemMessageId(2349);
 		YOU_CANNOT_USE_MY_TELEPORTS_WHILE_PARTICIPATING = new SystemMessageId(2349);