2
0
Эх сурвалжийг харах

Reworked charge system (DP update required).
New condition added: ConditionPlayerCharges, for checking number of charges.
"requiredCharges" is obsoleted and removed. Only charge consuming check still hardcoded.

_DS_ 15 жил өмнө
parent
commit
cb95a8c9cf

+ 0 - 7
L2_GameServer/java/com/l2jserver/gameserver/model/L2Skill.java

@@ -216,7 +216,6 @@ public abstract class L2Skill implements IChanceSkillTrigger
 
 
     private final int _minPledgeClass;
     private final int _minPledgeClass;
     private final boolean _isOffensive;
     private final boolean _isOffensive;
-    private final int _requiredCharges;
     private final int _maxCharges;
     private final int _maxCharges;
     private final int _numCharges;
     private final int _numCharges;
     private final int _triggeredId;
     private final int _triggeredId;
@@ -395,7 +394,6 @@ public abstract class L2Skill implements IChanceSkillTrigger
         _isOffensive = set.getBool("offensive", isSkillTypeOffensive());
         _isOffensive = set.getBool("offensive", isSkillTypeOffensive());
         _maxCharges = set.getInteger("maxCharges", 0);
         _maxCharges = set.getInteger("maxCharges", 0);
         _numCharges = set.getInteger("numCharges", 0);
         _numCharges = set.getInteger("numCharges", 0);
-        _requiredCharges = set.getInteger("requiredCharges", 0);
         _triggeredId = set.getInteger("triggeredId", 0);
         _triggeredId = set.getInteger("triggeredId", 0);
         _triggeredLevel = set.getInteger("triggeredLevel", 0);
         _triggeredLevel = set.getInteger("triggeredLevel", 0);
         _chanceType = set.getString("chanceType", "");
         _chanceType = set.getString("chanceType", "");
@@ -2492,11 +2490,6 @@ public abstract class L2Skill implements IChanceSkillTrigger
 	    return _afroId;
 	    return _afroId;
     }
     }
 
 
-    public final int getRequiredCharges()
-    {
-    	return _requiredCharges;
-    }
-    
     public final int getMaxCharges()
     public final int getMaxCharges()
     {
     {
     	return _maxCharges;
     	return _maxCharges;

+ 1 - 2
L2_GameServer/java/com/l2jserver/gameserver/model/actor/L2Character.java

@@ -6126,8 +6126,7 @@ public abstract class L2Character extends L2Object
 			{
 			{
 				int charges = ((L2PcInstance)this).getCharges();
 				int charges = ((L2PcInstance)this).getCharges();
 				// check for charges
 				// check for charges
-				if (charges < skill.getRequiredCharges()
-						|| (skill.getMaxCharges() == 0 && charges < skill.getNumCharges()))
+				if (skill.getMaxCharges() == 0 && charges < skill.getNumCharges())
 				{
 				{
 					SystemMessage sm = new SystemMessage(SystemMessageId.S1_CANNOT_BE_USED);
 					SystemMessage sm = new SystemMessage(SystemMessageId.S1_CANNOT_BE_USED);
 					sm.addSkillName(skill);
 					sm.addSkillName(skill);

+ 1 - 3
L2_GameServer/java/com/l2jserver/gameserver/model/actor/instance/L2PcInstance.java

@@ -4178,9 +4178,7 @@ public final class L2PcInstance extends L2Playable
 		final int charges = getCharges();
 		final int charges = getCharges();
 		// Check if the spell using charges or not in AirShip
 		// Check if the spell using charges or not in AirShip
 		// if skill generate charges and charges already at maximum - skill can't be used
 		// if skill generate charges and charges already at maximum - skill can't be used
-		if (charges < skill.getRequiredCharges()
-				|| (skill.getMaxCharges() == 0 && charges < skill.getNumCharges())
-				|| (skill.getMaxCharges() > 0 && charges >= skill.getMaxCharges())
+		if ((skill.getMaxCharges() == 0 && charges < skill.getNumCharges())
 				|| isInAirShip())
 				|| isInAirShip())
 		{
 		{
 			SystemMessage sm = new SystemMessage(SystemMessageId.S1_CANNOT_BE_USED);
 			SystemMessage sm = new SystemMessage(SystemMessageId.S1_CANNOT_BE_USED);

+ 5 - 0
L2_GameServer/java/com/l2jserver/gameserver/skills/DocumentBase.java

@@ -509,6 +509,11 @@ abstract class DocumentBase
             {
             {
                 forces[1] = Byte.decode(getValue(a.getNodeValue(), null));
                 forces[1] = Byte.decode(getValue(a.getNodeValue(), null));
             }
             }
+            else if ("charges".equalsIgnoreCase(a.getNodeName()))
+            {
+                int value = Integer.decode(getValue(a.getNodeValue(), template));
+                cond = joinAnd(cond, new ConditionPlayerCharges(value));
+            }
             else if ("weight".equalsIgnoreCase(a.getNodeName()))
             else if ("weight".equalsIgnoreCase(a.getNodeName()))
             {
             {
                 int weight = Integer.decode(getValue(a.getNodeValue(), null));
                 int weight = Integer.decode(getValue(a.getNodeValue(), null));

+ 35 - 0
L2_GameServer/java/com/l2jserver/gameserver/skills/conditions/ConditionPlayerCharges.java

@@ -0,0 +1,35 @@
+/*
+ * This program 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.
+ * 
+ * This program 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.gameserver.skills.conditions;
+
+import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;
+import com.l2jserver.gameserver.skills.Env;
+
+public class ConditionPlayerCharges extends Condition
+{
+
+	private final int _charges;
+
+	public ConditionPlayerCharges(int charges)
+	{
+		_charges = charges;
+	}
+
+	@Override
+	public boolean testImpl(Env env)
+	{
+		return ((L2PcInstance)env.player).getCharges() >= _charges;
+	}
+}