浏览代码

Another condition <player servitorNpcId="list of NPC IDs, comma separated" />
Can be used with any type of servitors (summon/pet).
Argument "0" can be used for checking if any summon/pet exists.
Condition <player hasPet="" /> was extended in the same way, but will return true only if any pet (not summon) exist.

_DS_ 15 年之前
父节点
当前提交
26d6acde73

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

@@ -659,6 +659,17 @@ abstract class DocumentBase
 	        	}
 	        	cond = joinAnd(cond, new ConditionPlayerHasPet(array));
 			}
+			else if ("servitorNpcId".equalsIgnoreCase(a.getNodeName()))
+			{
+	        	StringTokenizer st = new StringTokenizer(a.getNodeValue(), ",");
+	        	ArrayList<Integer> array = new ArrayList<Integer>(st.countTokens());
+	        	while (st.hasMoreTokens())
+	        	{
+	        		String item = st.nextToken().trim();
+	        		array.add(Integer.decode(getValue(item, null)));
+	        	}
+	        	cond = joinAnd(cond, new ConditionPlayerServitorNpcId(array));
+			}
         }
 
         if (forces[0] + forces[1] > 0)

+ 7 - 1
L2_GameServer/java/com/l2jserver/gameserver/skills/conditions/ConditionPlayerHasPet.java

@@ -27,7 +27,10 @@ public class ConditionPlayerHasPet extends Condition
 
 	public ConditionPlayerHasPet(ArrayList<Integer> itemIds)
 	{
-		_controlItemIds = itemIds;
+		if (itemIds.size() == 1 && itemIds.get(0) == 0)
+			_controlItemIds = null;
+		else
+			_controlItemIds = itemIds;
 	}
 
 	@Override
@@ -39,6 +42,9 @@ public class ConditionPlayerHasPet extends Condition
 		if (!(env.player.getPet() instanceof L2PetInstance))
 			return false;
 
+		if (_controlItemIds == null)
+			return true;
+
 		final L2ItemInstance controlItem = ((L2PetInstance)env.player.getPet()).getControlItem();
 		if (controlItem == null)
 			return false;

+ 46 - 0
L2_GameServer/java/com/l2jserver/gameserver/skills/conditions/ConditionPlayerServitorNpcId.java

@@ -0,0 +1,46 @@
+/*
+ * 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 java.util.ArrayList;
+
+import com.l2jserver.gameserver.model.actor.L2Summon;
+import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;
+import com.l2jserver.gameserver.skills.Env;
+
+public class ConditionPlayerServitorNpcId extends Condition
+{
+	private final ArrayList<Integer> _npcIds;
+
+	public ConditionPlayerServitorNpcId(ArrayList<Integer> npcIds)
+	{
+		if (npcIds.size() == 1 && npcIds.get(0) == 0)
+			_npcIds = null;
+		else
+			_npcIds = npcIds;
+	}
+
+	@Override
+	public boolean testImpl(Env env)
+	{
+		if (!(env.player instanceof L2PcInstance))
+			return false;
+
+		if (!(env.player.getPet() instanceof L2Summon))
+			return false;
+
+		return _npcIds == null || _npcIds.contains(env.player.getPet().getNpcId());
+	}
+}