Răsfoiți Sursa

BETA: Support for condition to verify player's abnormal type and level.

Zoey76 11 ani în urmă
părinte
comite
79a2f13228

+ 16 - 0
L2J_Server_BETA/java/com/l2jserver/gameserver/engines/DocumentBase.java

@@ -67,6 +67,7 @@ import com.l2jserver.gameserver.model.conditions.ConditionPlayerCanTakeFort;
 import com.l2jserver.gameserver.model.conditions.ConditionPlayerCanTransform;
 import com.l2jserver.gameserver.model.conditions.ConditionPlayerCanUntransform;
 import com.l2jserver.gameserver.model.conditions.ConditionPlayerCharges;
+import com.l2jserver.gameserver.model.conditions.ConditionPlayerCheckAbnormal;
 import com.l2jserver.gameserver.model.conditions.ConditionPlayerClassIdRestriction;
 import com.l2jserver.gameserver.model.conditions.ConditionPlayerCloakStatus;
 import com.l2jserver.gameserver.model.conditions.ConditionPlayerCp;
@@ -126,6 +127,7 @@ import com.l2jserver.gameserver.model.interfaces.IIdentifiable;
 import com.l2jserver.gameserver.model.items.L2Item;
 import com.l2jserver.gameserver.model.items.type.L2ArmorType;
 import com.l2jserver.gameserver.model.items.type.L2WeaponType;
+import com.l2jserver.gameserver.model.skills.AbnormalType;
 import com.l2jserver.gameserver.model.skills.EffectScope;
 import com.l2jserver.gameserver.model.skills.Skill;
 import com.l2jserver.gameserver.model.skills.funcs.FuncTemplate;
@@ -914,6 +916,20 @@ public abstract class DocumentBase
 					cond = joinAnd(cond, new ConditionPlayerInsideZoneId(array));
 					break;
 				}
+				case "checkAbnormal":
+				{
+					final String value = a.getNodeValue();
+					if (value.contains(","))
+					{
+						final String[] values = value.split(",");
+						cond = joinAnd(cond, new ConditionPlayerCheckAbnormal(AbnormalType.valueOf(values[0]), Integer.decode(getValue(values[1], template))));
+					}
+					else
+					{
+						cond = joinAnd(cond, new ConditionPlayerCheckAbnormal(AbnormalType.valueOf(value)));
+					}
+					break;
+				}
 			}
 		}
 		

+ 61 - 0
L2J_Server_BETA/java/com/l2jserver/gameserver/model/conditions/ConditionPlayerCheckAbnormal.java

@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2004-2014 L2J Server
+ * 
+ * This file is part of L2J Server.
+ * 
+ * L2J Server 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 Server 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.model.conditions;
+
+import com.l2jserver.gameserver.model.skills.AbnormalType;
+import com.l2jserver.gameserver.model.skills.BuffInfo;
+import com.l2jserver.gameserver.model.stats.Env;
+
+/**
+ * Condition implementation to verify player's abnormal type and level.
+ * @author Zoey76
+ */
+public class ConditionPlayerCheckAbnormal extends Condition
+{
+	private final AbnormalType _type;
+	private final int _level;
+	
+	/**
+	 * Instantiates a new condition player check abnormal.
+	 * @param type the abnormal type
+	 */
+	public ConditionPlayerCheckAbnormal(AbnormalType type)
+	{
+		_type = type;
+		_level = -1;
+	}
+	
+	/**
+	 * Instantiates a new condition player check abnormal.
+	 * @param type the abnormal type
+	 * @param level the abnormal level
+	 */
+	public ConditionPlayerCheckAbnormal(AbnormalType type, int level)
+	{
+		_type = type;
+		_level = level;
+	}
+	
+	@Override
+	public boolean testImpl(Env env)
+	{
+		final BuffInfo info = env.getCharacter().getEffectList().getBuffInfoByAbnormalType(_type);
+		return ((info != null) && ((_level == -1) || (_level >= info.getSkill().getAbnormalLvl())));
+	}
+}