View difference between Paste ID: Eacr4uG6 and zWs3WSNV
SHOW: | | - or go back to the newest paste.
1
### Eclipse Workspace Patch 1.0
2
#P L2J_Server_BETA
3
Index: java/com/l2jserver/gameserver/model/actor/status/CharStatus.java
4
===================================================================
5
--- java/com/l2jserver/gameserver/model/actor/status/CharStatus.java	(revision 6577)
6
+++ java/com/l2jserver/gameserver/model/actor/status/CharStatus.java	(working copy)
7
@@ -28,6 +28,7 @@
8
 import com.l2jserver.Config;
9
 import com.l2jserver.gameserver.ThreadPoolManager;
10
 import com.l2jserver.gameserver.model.actor.L2Character;
11
+import com.l2jserver.gameserver.model.actor.instance.L2NpcInstance;
12
 import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;
13
 import com.l2jserver.gameserver.model.actor.stat.CharStat;
14
 import com.l2jserver.gameserver.model.stats.Formulas;
15
@@ -170,7 +171,7 @@
16
 			setCurrentHp(Math.max(getCurrentHp() - value, 0));
17
 		}
18
 		
19
-		if ((getActiveChar().getCurrentHp() < 0.5) && getActiveChar().isMortal()) // Die
20
+		if ((getActiveChar().getCurrentHp() < 0.5) && getActiveChar().isMortal() && !(getActiveChar() instanceof L2NpcInstance)) // Die
21
 		{
22
 			getActiveChar().abortAttack();
23
 			getActiveChar().abortCast();
24
Index: java/com/l2jserver/gameserver/model/actor/status/FolkStatus.java
25
===================================================================
26
--- java/com/l2jserver/gameserver/model/actor/status/FolkStatus.java	(revision 6577)
27
+++ java/com/l2jserver/gameserver/model/actor/status/FolkStatus.java	(working copy)
28
@@ -34,12 +34,13 @@
29
 	@Override
30
 	public final void reduceHp(double value, L2Character attacker)
31
 	{
32
-		reduceHp(value, attacker, true, false, false);
33
+		super.reduceHp(value, attacker);
34
 	}
35
 	
36
 	@Override
37
 	public final void reduceHp(double value, L2Character attacker, boolean awake, boolean isDOT, boolean isHpConsumption)
38
 	{
39
+		super.reduceHp(value, attacker, awake, isDOT, isHpConsumption);
40
 	}
41
 	
42-
 	@Override
42+
43
Index: java/com/l2jserver/gameserver/model/actor/L2Character.java
44
===================================================================
45
--- java/com/l2jserver/gameserver/model/actor/L2Character.java	(revision 6577)
46
+++ java/com/l2jserver/gameserver/model/actor/L2Character.java	(working copy)
47
@@ -5049,16 +5049,6 @@
48
 				}
49
 			}
50
 			
51
-			// reduce targets HP
52
-			target.reduceCurrentHp(damage, this, null);
53
-			target.notifyDamageReceived(damage, this, null, crit, false);
54
-			
55
-			if (reflectedDamage > 0)
56
-			{
57
-				reduceCurrentHp(reflectedDamage, target, true, false, null);
58
-				notifyDamageReceived(reflectedDamage, target, null, crit, false);
59
-			}
60
-			
61
 			if (!isBow) // Do not absorb if weapon is of type bow
62
 			{
63
 				// Absorb HP from the damage inflicted
64
@@ -5066,15 +5056,15 @@
65
 				
66
 				if (absorbPercent > 0)
67
 				{
68
-					int maxCanAbsorb = (int) (getMaxRecoverableHp() - getCurrentHp());
69
-					int absorbDamage = (int) ((absorbPercent / 100.) * damage);
70
+					final double targetCurrentHp = target.getCurrentHp();
71
+					double vampiricDamage = damage > targetCurrentHp ? targetCurrentHp : damage;
72
+					double absorbDamage = (absorbPercent / 100.) * vampiricDamage;
73
 					
74
-					if (absorbDamage > maxCanAbsorb)
75
+					if ((getCurrentHp() + absorbDamage) > getMaxRecoverableHp())
76
 					{
77
-						absorbDamage = maxCanAbsorb; // Can't absord more than max hp
78
+						setCurrentHp(getMaxRecoverableHp());
79
 					}
80
-					
81
-					if (absorbDamage > 0)
82
+					else
83
 					{
84
 						setCurrentHp(getCurrentHp() + absorbDamage);
85
 					}
86
@@ -5085,22 +5075,32 @@
87
 				
88
 				if (absorbPercent > 0)
89
 				{
90
-					int maxCanAbsorb = (int) (getMaxRecoverableMp() - getCurrentMp());
91
-					int absorbDamage = (int) ((absorbPercent / 100.) * damage);
92
+					final double targetCurrentHp = target.getCurrentHp();
93
+					double vampiricDamage = damage > targetCurrentHp ? targetCurrentHp : damage;
94
+					double absorbDamage = (absorbPercent / 100.) * vampiricDamage;
95
 					
96
-					if (absorbDamage > maxCanAbsorb)
97
+					if ((getCurrentMp() + absorbDamage) > getMaxRecoverableMp())
98
 					{
99
-						absorbDamage = maxCanAbsorb; // Can't absord more than max hp
100
+						setCurrentHp(getMaxRecoverableMp());
101
 					}
102
-					
103
-					if (absorbDamage > 0)
104
+					else
105
 					{
106
-						setCurrentMp(getCurrentMp() + absorbDamage);
107
+						setCurrentHp(getCurrentMp() + absorbDamage);
108
 					}
109
 				}
110
 				
111
 			}
112
 			
113
+			// reduce targets HP
114
+			target.reduceCurrentHp(damage, this, null);
115
+			target.notifyDamageReceived(damage, this, null, crit, false);
116
+			
117
+			if (reflectedDamage > 0)
118
+			{
119
+				reduceCurrentHp(reflectedDamage, target, true, false, null);
120
+				notifyDamageReceived(reflectedDamage, target, null, crit, false);
121
+			}
122
+			
123
 			// Notify AI with EVT_ATTACKED
124
 			if (target.hasAI())
125
 			{