소스 검색

BETA: Skills Rework:
* Added new skill effects '''!CallPc''' and '''!CallParty'''.
* Removed old skillType.
* Fixed operateType in some skills.
Reviewed by: Zoey76

Adry_85 12 년 전
부모
커밋
12c0ef9dab

+ 2 - 0
L2J_DataPack_BETA/dist/game/data/scripts/handlers/EffectMasterHandler.java

@@ -46,6 +46,8 @@ public final class EffectMasterHandler
 		BlockResurrection.class,
 		Bluff.class,
 		Buff.class,
+		CallParty.class,
+		CallPc.class,
 		Cancel.class,
 		CancelAll.class,
 		CancelDebuff.class,

+ 0 - 2
L2J_DataPack_BETA/dist/game/data/scripts/handlers/MasterHandler.java

@@ -221,7 +221,6 @@ import handlers.skillhandlers.RefuelAirShip;
 import handlers.skillhandlers.Resurrect;
 import handlers.skillhandlers.ShiftTarget;
 import handlers.skillhandlers.Sow;
-import handlers.skillhandlers.SummonFriend;
 import handlers.skillhandlers.TakeCastle;
 import handlers.skillhandlers.TakeFort;
 import handlers.skillhandlers.TransformDispel;
@@ -522,7 +521,6 @@ public class MasterHandler
 			Resurrect.class,
 			ShiftTarget.class,
 			Sow.class,
-			SummonFriend.class,
 			TakeCastle.class,
 			TakeFort.class,
 			TransformDispel.class,

+ 77 - 0
L2J_DataPack_BETA/dist/game/data/scripts/handlers/effecthandlers/CallParty.java

@@ -0,0 +1,77 @@
+/*
+ * Copyright (C) 2004-2013 L2J DataPack
+ * 
+ * This file is part of L2J DataPack.
+ * 
+ * L2J DataPack 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 DataPack 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 handlers.effecthandlers;
+
+import com.l2jserver.gameserver.model.L2Party;
+import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;
+import com.l2jserver.gameserver.model.effects.EffectTemplate;
+import com.l2jserver.gameserver.model.effects.L2Effect;
+import com.l2jserver.gameserver.model.effects.L2EffectType;
+import com.l2jserver.gameserver.model.stats.Env;
+
+/**
+ * Call Party effect implementation.
+ * @author Adry_85
+ */
+public class CallParty extends L2Effect
+{
+	public CallParty(Env env, EffectTemplate template)
+	{
+		super(env, template);
+	}
+	
+	@Override
+	public boolean calcSuccess()
+	{
+		return true;
+	}
+	
+	@Override
+	public L2EffectType getEffectType()
+	{
+		return L2EffectType.NONE;
+	}
+	
+	@Override
+	public boolean isInstant()
+	{
+		return true;
+	}
+	
+	@Override
+	public boolean onStart()
+	{
+		L2Party party = getEffector().getParty();
+		if (party != null)
+		{
+			for (L2PcInstance partyMember : party.getMembers())
+			{
+				if (CallPc.checkSummonTargetStatus(partyMember, getEffector().getActingPlayer()))
+				{
+					if (getEffector() != partyMember)
+					{
+						partyMember.teleToLocation(getEffector().getX(), getEffector().getY(), getEffector().getZ(), true);
+					}
+				}
+			}
+			return true;
+		}
+		return false;
+	}
+}

+ 199 - 0
L2J_DataPack_BETA/dist/game/data/scripts/handlers/effecthandlers/CallPc.java

@@ -0,0 +1,199 @@
+/*
+ * Copyright (C) 2004-2013 L2J DataPack
+ * 
+ * This file is part of L2J DataPack.
+ * 
+ * L2J DataPack 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 DataPack 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 handlers.effecthandlers;
+
+import com.l2jserver.Config;
+import com.l2jserver.gameserver.SevenSigns;
+import com.l2jserver.gameserver.instancemanager.InstanceManager;
+import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;
+import com.l2jserver.gameserver.model.effects.EffectTemplate;
+import com.l2jserver.gameserver.model.effects.L2Effect;
+import com.l2jserver.gameserver.model.effects.L2EffectType;
+import com.l2jserver.gameserver.model.entity.Instance;
+import com.l2jserver.gameserver.model.entity.TvTEvent;
+import com.l2jserver.gameserver.model.holders.SummonRequestHolder;
+import com.l2jserver.gameserver.model.stats.Env;
+import com.l2jserver.gameserver.model.zone.ZoneId;
+import com.l2jserver.gameserver.network.SystemMessageId;
+import com.l2jserver.gameserver.network.serverpackets.ConfirmDlg;
+import com.l2jserver.gameserver.network.serverpackets.SystemMessage;
+
+/**
+ * Call Pc effect implementation.
+ * @author Adry_85
+ */
+public class CallPc extends L2Effect
+{
+	private static int _itemId;
+	private static int _itemCount;
+	
+	public CallPc(Env env, EffectTemplate template)
+	{
+		super(env, template);
+		_itemId = template.getParameters().getInteger("itemId", 0);
+		_itemCount = template.getParameters().getInteger("itemCount", 0);
+	}
+	
+	@Override
+	public boolean calcSuccess()
+	{
+		return true;
+	}
+	
+	@Override
+	public L2EffectType getEffectType()
+	{
+		return L2EffectType.NONE;
+	}
+	
+	@Override
+	public boolean isInstant()
+	{
+		return true;
+	}
+	
+	@Override
+	public boolean onStart()
+	{
+		if (getEffected() == getEffector())
+		{
+			return false;
+		}
+		
+		L2PcInstance target = getEffected().getActingPlayer();
+		L2PcInstance activeChar = getEffector().getActingPlayer();
+		if (checkSummonTargetStatus(target, activeChar))
+		{
+			if ((_itemId != 0) && (_itemCount != 0))
+			{
+				if (target.getInventory().getInventoryItemCount(_itemId, 0) < _itemCount)
+				{
+					SystemMessage sm = SystemMessage.getSystemMessage(SystemMessageId.S1_REQUIRED_FOR_SUMMONING);
+					sm.addItemName(_itemId);
+					target.sendPacket(sm);
+					return false;
+				}
+				target.getInventory().destroyItemByItemId("Consume", _itemId, _itemCount, activeChar, target);
+				SystemMessage sm = SystemMessage.getSystemMessage(SystemMessageId.S1_DISAPPEARED);
+				sm.addItemName(_itemId);
+				target.sendPacket(sm);
+			}
+			
+			target.addScript(new SummonRequestHolder(activeChar, getSkill()));
+			final ConfirmDlg confirm = new ConfirmDlg(SystemMessageId.C1_WISHES_TO_SUMMON_YOU_FROM_S2_DO_YOU_ACCEPT.getId());
+			confirm.addCharName(activeChar);
+			confirm.addZoneName(activeChar.getX(), activeChar.getY(), activeChar.getZ());
+			confirm.addTime(30000);
+			confirm.addRequesterId(activeChar.getObjectId());
+			target.sendPacket(confirm);
+			return true;
+		}
+		return false;
+	}
+	
+	public static boolean checkSummonTargetStatus(L2PcInstance target, L2PcInstance activeChar)
+	{
+		if (target == activeChar)
+		{
+			return false;
+		}
+		
+		if (target.isAlikeDead())
+		{
+			SystemMessage sm = SystemMessage.getSystemMessage(SystemMessageId.C1_IS_DEAD_AT_THE_MOMENT_AND_CANNOT_BE_SUMMONED);
+			sm.addPcName(target);
+			activeChar.sendPacket(sm);
+			return false;
+		}
+		
+		if (target.isInStoreMode())
+		{
+			SystemMessage sm = SystemMessage.getSystemMessage(SystemMessageId.C1_CURRENTLY_TRADING_OR_OPERATING_PRIVATE_STORE_AND_CANNOT_BE_SUMMONED);
+			sm.addPcName(target);
+			activeChar.sendPacket(sm);
+			return false;
+		}
+		
+		if (target.isRooted() || target.isInCombat())
+		{
+			SystemMessage sm = SystemMessage.getSystemMessage(SystemMessageId.C1_IS_ENGAGED_IN_COMBAT_AND_CANNOT_BE_SUMMONED);
+			sm.addPcName(target);
+			activeChar.sendPacket(sm);
+			return false;
+		}
+		
+		if (target.isInOlympiadMode())
+		{
+			activeChar.sendPacket(SystemMessageId.YOU_CANNOT_SUMMON_PLAYERS_WHO_ARE_IN_OLYMPIAD);
+			return false;
+		}
+		
+		if (target.isFestivalParticipant() || target.isFlyingMounted() || target.isCombatFlagEquipped() || !TvTEvent.onEscapeUse(target.getObjectId()))
+		{
+			activeChar.sendPacket(SystemMessageId.YOUR_TARGET_IS_IN_AN_AREA_WHICH_BLOCKS_SUMMONING);
+			return false;
+		}
+		
+		if (target.inObserverMode())
+		{
+			SystemMessage sm = SystemMessage.getSystemMessage(SystemMessageId.C1_STATE_FORBIDS_SUMMONING);
+			sm.addCharName(target);
+			activeChar.sendPacket(sm);
+			return false;
+		}
+		
+		if (target.isInsideZone(ZoneId.NO_SUMMON_FRIEND) || target.isInsideZone(ZoneId.JAIL))
+		{
+			SystemMessage sm = SystemMessage.getSystemMessage(SystemMessageId.C1_IN_SUMMON_BLOCKING_AREA);
+			sm.addString(target.getName());
+			activeChar.sendPacket(sm);
+			return false;
+		}
+		
+		if (activeChar.getInstanceId() > 0)
+		{
+			Instance summonerInstance = InstanceManager.getInstance().getInstance(activeChar.getInstanceId());
+			if (!Config.ALLOW_SUMMON_TO_INSTANCE || !summonerInstance.isSummonAllowed())
+			{
+				activeChar.sendPacket(SystemMessageId.YOU_MAY_NOT_SUMMON_FROM_YOUR_CURRENT_LOCATION);
+				return false;
+			}
+		}
+		
+		// TODO: on retail character can enter 7s dungeon with summon friend, but should be teleported away by mobs, because currently this is not working in L2J we do not allowing summoning.
+		if (activeChar.isIn7sDungeon())
+		{
+			int targetCabal = SevenSigns.getInstance().getPlayerCabal(target.getObjectId());
+			if (SevenSigns.getInstance().isSealValidationPeriod())
+			{
+				if (targetCabal != SevenSigns.getInstance().getCabalHighestScore())
+				{
+					activeChar.sendPacket(SystemMessageId.YOUR_TARGET_IS_IN_AN_AREA_WHICH_BLOCKS_SUMMONING);
+					return false;
+				}
+			}
+			else if (targetCabal == SevenSigns.CABAL_NULL)
+			{
+				activeChar.sendPacket(SystemMessageId.YOUR_TARGET_IS_IN_AN_AREA_WHICH_BLOCKS_SUMMONING);
+				return false;
+			}
+		}
+		return true;
+	}
+}

+ 0 - 135
L2J_DataPack_BETA/dist/game/data/scripts/handlers/skillhandlers/SummonFriend.java

@@ -1,135 +0,0 @@
-/*
- * Copyright (C) 2004-2013 L2J DataPack
- * 
- * This file is part of L2J DataPack.
- * 
- * L2J DataPack 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 DataPack 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 handlers.skillhandlers;
-
-import java.util.logging.Level;
-
-import com.l2jserver.gameserver.handler.ISkillHandler;
-import com.l2jserver.gameserver.model.L2Object;
-import com.l2jserver.gameserver.model.L2Party;
-import com.l2jserver.gameserver.model.actor.L2Character;
-import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;
-import com.l2jserver.gameserver.model.holders.SummonRequestHolder;
-import com.l2jserver.gameserver.model.skills.L2Skill;
-import com.l2jserver.gameserver.model.skills.L2SkillType;
-import com.l2jserver.gameserver.network.SystemMessageId;
-import com.l2jserver.gameserver.network.serverpackets.ConfirmDlg;
-import com.l2jserver.gameserver.network.serverpackets.SystemMessage;
-
-/**
- * @author BiTi, Sami, Zoey76
- */
-public class SummonFriend implements ISkillHandler
-{
-	private static final L2SkillType[] SKILL_IDS =
-	{
-		L2SkillType.SUMMON_FRIEND
-	};
-	
-	@Override
-	public void useSkill(L2Character activeChar, L2Skill skill, L2Object[] targets)
-	{
-		if (!activeChar.isPlayer())
-		{
-			return;
-		}
-		final boolean isMastersCall = skill.getId() == 23249;
-		final L2PcInstance activePlayer = activeChar.getActingPlayer();
-		if (!isMastersCall && !L2PcInstance.checkSummonerStatus(activePlayer))
-		{
-			return;
-		}
-		
-		try
-		{
-			for (L2Character target : (L2Character[]) targets)
-			{
-				if ((target == null) || (activeChar == target))
-				{
-					continue;
-				}
-				
-				if (target.isPlayer())
-				{
-					if (isMastersCall) // Master's Call
-					{
-						final L2Party party = target.getParty();
-						if (party != null)
-						{
-							for (L2PcInstance partyMember : party.getMembers())
-							{
-								if (target != partyMember)
-								{
-									partyMember.teleToLocation(target.getX(), target.getY(), target.getZ(), true);
-								}
-							}
-						}
-						else
-						{
-							activePlayer.sendMessage(target.getName() + " doesn't have a party.");
-						}
-						continue;
-					}
-					
-					final L2PcInstance targetPlayer = target.getActingPlayer();
-					if (!L2PcInstance.checkSummonTargetStatus(targetPlayer, activePlayer))
-					{
-						continue;
-					}
-					
-					final SummonRequestHolder holder = target.getScript(SummonRequestHolder.class);
-					if (holder != null)
-					{
-						final SystemMessage sm = SystemMessage.getSystemMessage(SystemMessageId.C1_ALREADY_SUMMONED);
-						sm.addString(target.getName());
-						activePlayer.sendPacket(sm);
-						continue;
-					}
-					
-					if (skill.getId() == 1403) // Summon Friend
-					{
-						target.addScript(new SummonRequestHolder(activePlayer, skill));
-						
-						// Send message
-						final ConfirmDlg confirm = new ConfirmDlg(SystemMessageId.C1_WISHES_TO_SUMMON_YOU_FROM_S2_DO_YOU_ACCEPT.getId());
-						confirm.addCharName(activeChar);
-						confirm.addZoneName(activeChar.getX(), activeChar.getY(), activeChar.getZ());
-						confirm.addTime(30000);
-						confirm.addRequesterId(activePlayer.getObjectId());
-						target.sendPacket(confirm);
-					}
-					else
-					{
-						L2PcInstance.teleToTarget(targetPlayer, activePlayer, skill);
-					}
-				}
-			}
-		}
-		catch (Exception e)
-		{
-			_log.log(Level.SEVERE, "", e);
-		}
-	}
-	
-	@Override
-	public L2SkillType[] getSkillIds()
-	{
-		return SKILL_IDS;
-	}
-}

+ 39 - 15
L2J_DataPack_BETA/dist/game/data/stats/skills/01400-01499.xml

@@ -145,44 +145,60 @@
 		</enchant4for>
 	</skill>
 	<skill id="1403" levels="1" name="Summon Friend">
-		<set name="affectRange" val="-1" />
+		<!-- Confirmed CT2.5 -->
+		<set name="aggroPoints" val="467" />
 		<set name="castRange" val="-2" />
 		<set name="effectRange" val="-2" />
 		<set name="hitTime" val="15000" />
 		<set name="isMagic" val="1" /> <!-- Magic Skill -->
-		<set name="mpConsume" val="180" />
+		<set name="magicLvl" val="56" />
+		<set name="mpConsume" val="36" />
+		<set name="mpInitialConsume" val="144" />
 		<set name="operateType" val="A1" />
 		<set name="reuseDelay" val="150000" />
-		<set name="skillType" val="SUMMON_FRIEND" />
-		<set name="targetConsumeCount" val="1" />
-		<set name="targetConsumeId" val="8615" />
 		<set name="targetType" val="PARTY_MEMBER" />
+		<cond>
+			<player callPc="true" />
+		</cond>
 		<cond msgId="113" addName="1">
 			<not>
 				<player insideZoneId="10501, 10502, 10503, 10504, 10505, 10506, 10507, 10508" />
 			</not>
 		</cond>
+		<for>
+			<effect name="CallPc" noicon="1" val="0">
+				<param itemId="8615" itemCount="1" />
+			</effect>
+		</for>
 	</skill>
 	<skill id="1404" levels="1" name="Word of Invitation">
-		<set name="affectRange" val="-1" />
+		<!-- Confirmed CT2.5 -->
+		<set name="aggroPoints" val="677" />
 		<set name="castRange" val="-2" />
 		<set name="effectRange" val="-2" />
 		<set name="hitTime" val="15000" />
 		<set name="isMagic" val="1" /> <!-- Magic Skill -->
 		<set name="itemConsumeCount" val="3" />
 		<set name="itemConsumeId" val="3031" />
-		<set name="mpConsume" val="320" />
+		<set name="magicLvl" val="66" />
+		<set name="mpConsume" val="64" />
+		<set name="mpInitialConsume" val="256" />
 		<set name="operateType" val="A1" />
 		<set name="reuseDelay" val="900000" />
-		<set name="skillType" val="SUMMON_FRIEND" />
-		<set name="targetConsumeCount" val="1" />
-		<set name="targetConsumeId" val="8615" />
-		<set name="targetType" val="PARTY" />
+		<set name="targetType" val="PARTY_MEMBER" />
+		<cond>
+			<player callPc="true" />
+		</cond>
 		<cond msgId="113" addName="1">
 			<not>
 				<player insideZoneId="10501, 10502, 10503, 10504, 10505, 10506, 10507, 10508" />
 			</not>
 		</cond>
+		<for>
+			<effect name="CallPc" noicon="1" val="0">
+				<param itemId="8615" itemCount="1" />
+			</effect>
+		</for>
 	</skill>
 	<skill id="1405" levels="4" name="Divine Inspiration">
 		<!-- Confirmed CT2.5 -->
@@ -884,22 +900,30 @@
 		</for>
 	</skill>
 	<skill id="1429" levels="1" name="Gate Chant">
-		<set name="affectRange" val="-1" />
+		<!-- Confirmed CT2.5 -->
+		<set name="aggroPoints" val="467" />
 		<set name="hitTime" val="15000" />
 		<set name="isMagic" val="1" /> <!-- Magic Skill -->
 		<set name="itemConsumeCount" val="4" />
 		<set name="itemConsumeId" val="8615" />
-		<set name="mpConsume" val="284" />
+		<set name="magicLvl" val="78" />
+		<set name="mpConsume" val="57" />
+		<set name="mpInitialConsume" val="227" />
 		<set name="operateType" val="A1" />
 		<set name="reuseDelay" val="600000" />
-		<set name="skillType" val="SUMMON_FRIEND" />
 		<set name="staticReuse" val="true" />
-		<set name="targetType" val="PARTY" />
+		<set name="targetType" val="SELF" />
+		<cond>
+			<player callPc="true" />
+		</cond>
 		<cond msgId="113" addName="1">
 			<not>
 				<player insideZoneId="10501, 10502, 10503" />
 			</not>
 		</cond>
+		<for>
+			<effect name="CallParty" noicon="1" val="0" />
+		</for>
 	</skill>
 	<skill id="1430" levels="5" name="Invocation">
 		<!-- Confirmed CT2.5 -->

+ 47 - 45
L2J_DataPack_BETA/dist/game/data/stats/skills/23200-23299.xml

@@ -404,7 +404,7 @@
 		<set name="castRange" val="900" />
 		<set name="effectRange" val="1400" />
 		<set name="hitTime" val="500" />
-		<set name="operateType" val="A1" /> <!-- FIXME: value unconfirmed -->
+		<set name="operateType" val="A2" />
 		<set name="skillType" val="BUFF" />
 		<set name="targetType" val="ONE" />
 		<for>
@@ -465,7 +465,7 @@
 		<set name="coolTime" val="500" />
 		<set name="effectRange" val="1400" />
 		<set name="hitTime" val="500" />
-		<set name="operateType" val="A1" /> <!-- FIXME: value unconfirmed -->
+		<set name="operateType" val="A2" />
 		<set name="skillType" val="BUFF" />
 		<set name="targetType" val="ONE" />
 		<for>
@@ -489,7 +489,7 @@
 		<set name="coolTime" val="500" />
 		<set name="effectRange" val="1400" />
 		<set name="hitTime" val="4000" />
-		<set name="operateType" val="A1" /> <!-- FIXME: value unconfirmed -->
+		<set name="operateType" val="A2" />
 		<set name="skillType" val="BUFF" />
 		<set name="targetType" val="ONE" />
 		<for>
@@ -513,7 +513,7 @@
 		<set name="coolTime" val="500" />
 		<set name="effectRange" val="1400" />
 		<set name="hitTime" val="500" />
-		<set name="operateType" val="A1" /> <!-- FIXME: value unconfirmed -->
+		<set name="operateType" val="A2" />
 		<set name="skillType" val="BUFF" />
 		<set name="targetType" val="ONE" />
 		<for>
@@ -537,7 +537,7 @@
 		<set name="coolTime" val="500" />
 		<set name="effectRange" val="1400" />
 		<set name="hitTime" val="500" />
-		<set name="operateType" val="A1" /> <!-- FIXME: value unconfirmed -->
+		<set name="operateType" val="A2" />
 		<set name="skillType" val="BUFF" />
 		<set name="targetType" val="ONE" />
 		<for>
@@ -581,7 +581,7 @@
 		<set name="castRange" val="400" />
 		<set name="effectRange" val="900" />
 		<set name="hitTime" val="500" />
-		<set name="operateType" val="A1" /> <!-- FIXME: value unconfirmed -->
+		<set name="operateType" val="A2" />
 		<set name="skillType" val="BUFF" />
 		<set name="targetType" val="ONE" />
 		<for>
@@ -603,7 +603,7 @@
 		<set name="castRange" val="400" />
 		<set name="effectRange" val="900" />
 		<set name="hitTime" val="500" />
-		<set name="operateType" val="A1" /> <!-- FIXME: value unconfirmed -->
+		<set name="operateType" val="A2" />
 		<set name="skillType" val="BUFF" />
 		<set name="targetType" val="ONE" />
 		<for>
@@ -619,9 +619,11 @@
 		<set name="castRange" val="2000" />
 		<set name="effectRange" val="2500" />
 		<set name="hitTime" val="500" />
-		<set name="operateType" val="A1" /> <!-- FIXME: value unconfirmed -->
-		<set name="skillType" val="SUMMON_FRIEND" />
-		<set name="targetType" val="ONE" />
+		<set name="operateType" val="A1" />
+		<set name="targetType" val="SELF" />
+		<for>
+			<effect name="CallParty" noicon="1" val="0" />
+		</for>
 	</skill>
 	<skill id="23250" levels="1" name="Kau Agathion Cute Trick">
 		<!-- You can see the summoned spirit's cute tricks. -->
@@ -649,7 +651,7 @@
 		<set name="abnormalType" val="CRITICAL_PROB_UP" />
 		<set name="affectRange" val="200" />
 		<set name="hitTime" val="500" />
-		<set name="operateType" val="A1" /> <!-- FIXME: value unconfirmed -->
+		<set name="operateType" val="A2" />
 		<set name="skillType" val="BUFF" />
 		<set name="targetType" val="AURA" />
 		<for>
@@ -666,7 +668,7 @@
 		<set name="abnormalType" val="CRITICAL_DMG_UP" />
 		<set name="affectRange" val="200" />
 		<set name="hitTime" val="500" />
-		<set name="operateType" val="A1" /> <!-- FIXME: value unconfirmed -->
+		<set name="operateType" val="A2" />
 		<set name="skillType" val="BUFF" />
 		<set name="targetType" val="AURA" />
 		<for>
@@ -683,7 +685,7 @@
 		<set name="abnormalType" val="ATTACK_TIME_DOWN" />
 		<set name="affectRange" val="200" />
 		<set name="hitTime" val="500" />
-		<set name="operateType" val="A1" /> <!-- FIXME: value unconfirmed -->
+		<set name="operateType" val="A2" />
 		<set name="skillType" val="BUFF" />
 		<set name="targetType" val="AURA" />
 		<for>
@@ -700,7 +702,7 @@
 		<set name="abnormalType" val="HIT_UP" />
 		<set name="affectRange" val="200" />
 		<set name="hitTime" val="500" />
-		<set name="operateType" val="A1" /> <!-- FIXME: value unconfirmed -->
+		<set name="operateType" val="A2" />
 		<set name="skillType" val="BUFF" />
 		<set name="targetType" val="AURA" />
 		<for>
@@ -717,7 +719,7 @@
 		<set name="abnormalType" val="MAX_HP_UP" />
 		<set name="affectRange" val="200" />
 		<set name="hitTime" val="500" />
-		<set name="operateType" val="A1" /> <!-- FIXME: value unconfirmed -->
+		<set name="operateType" val="A2" />
 		<set name="skillType" val="BUFF" />
 		<set name="targetType" val="AURA" />
 		<for>
@@ -734,7 +736,7 @@
 		<set name="abnormalType" val="MAX_MP_UP" />
 		<set name="affectRange" val="200" />
 		<set name="hitTime" val="500" />
-		<set name="operateType" val="A1" /> <!-- FIXME: value unconfirmed -->
+		<set name="operateType" val="A2" />
 		<set name="skillType" val="BUFF" />
 		<set name="targetType" val="AURA" />
 		<for>
@@ -751,7 +753,7 @@
 		<set name="abnormalType" val="AVOID_UP" />
 		<set name="affectRange" val="200" />
 		<set name="hitTime" val="500" />
-		<set name="operateType" val="A1" /> <!-- FIXME: value unconfirmed -->
+		<set name="operateType" val="A2" />
 		<set name="skillType" val="BUFF" />
 		<set name="targetType" val="AURA" />
 		<for>
@@ -768,7 +770,7 @@
 		<set name="abnormalType" val="CASTING_TIME_DOWN" />
 		<set name="affectRange" val="200" />
 		<set name="hitTime" val="500" />
-		<set name="operateType" val="A1" /> <!-- FIXME: value unconfirmed -->
+		<set name="operateType" val="A2" />
 		<set name="skillType" val="BUFF" />
 		<set name="targetType" val="AURA" />
 		<for>
@@ -785,7 +787,7 @@
 		<set name="abnormalType" val="DECREASE_WEIGHT_PENALTY" />
 		<set name="affectRange" val="200" />
 		<set name="hitTime" val="500" />
-		<set name="operateType" val="A1" /> <!-- FIXME: value unconfirmed -->
+		<set name="operateType" val="A2" />
 		<set name="skillType" val="BUFF" />
 		<set name="targetType" val="AURA" />
 		<for>
@@ -802,7 +804,7 @@
 		<set name="abnormalType" val="PA_UP" />
 		<set name="affectRange" val="200" />
 		<set name="hitTime" val="500" />
-		<set name="operateType" val="A1" /> <!-- FIXME: value unconfirmed -->
+		<set name="operateType" val="A2" />
 		<set name="skillType" val="BUFF" />
 		<set name="targetType" val="AURA" />
 		<for>
@@ -819,7 +821,7 @@
 		<set name="abnormalType" val="PD_UP" />
 		<set name="affectRange" val="200" />
 		<set name="hitTime" val="500" />
-		<set name="operateType" val="A1" /> <!-- FIXME: value unconfirmed -->
+		<set name="operateType" val="A2" />
 		<set name="skillType" val="BUFF" />
 		<set name="targetType" val="AURA" />
 		<for>
@@ -836,7 +838,7 @@
 		<set name="abnormalType" val="MD_UP" />
 		<set name="affectRange" val="200" />
 		<set name="hitTime" val="500" />
-		<set name="operateType" val="A1" /> <!-- FIXME: value unconfirmed -->
+		<set name="operateType" val="A2" />
 		<set name="skillType" val="BUFF" />
 		<set name="targetType" val="AURA" />
 		<for>
@@ -853,7 +855,7 @@
 		<set name="abnormalType" val="VAMPIRIC_ATTACK" />
 		<set name="affectRange" val="200" />
 		<set name="hitTime" val="500" />
-		<set name="operateType" val="A1" /> <!-- FIXME: value unconfirmed -->
+		<set name="operateType" val="A2" />
 		<set name="skillType" val="BUFF" />
 		<set name="targetType" val="AURA" />
 		<for>
@@ -870,7 +872,7 @@
 		<set name="abnormalType" val="MA_UP" />
 		<set name="affectRange" val="200" />
 		<set name="hitTime" val="500" />
-		<set name="operateType" val="A1" /> <!-- FIXME: value unconfirmed -->
+		<set name="operateType" val="A2" />
 		<set name="skillType" val="BUFF" />
 		<set name="targetType" val="AURA" />
 		<for>
@@ -887,7 +889,7 @@
 		<set name="abnormalType" val="SPEED_UP" />
 		<set name="affectRange" val="200" />
 		<set name="hitTime" val="500" />
-		<set name="operateType" val="A1" /> <!-- FIXME: value unconfirmed -->
+		<set name="operateType" val="A2" />
 		<set name="skillType" val="BUFF" />
 		<set name="targetType" val="AURA" />
 		<for>
@@ -904,7 +906,7 @@
 		<set name="abnormalType" val="BERSERKER" />
 		<set name="affectRange" val="200" />
 		<set name="hitTime" val="500" />
-		<set name="operateType" val="A1" /> <!-- FIXME: value unconfirmed -->
+		<set name="operateType" val="A2" />
 		<set name="skillType" val="BUFF" />
 		<set name="targetType" val="AURA" />
 		<for>
@@ -928,7 +930,7 @@
 		<set name="abnormalType" val="PA_PD_UP" />
 		<set name="affectRange" val="200" />
 		<set name="hitTime" val="500" />
-		<set name="operateType" val="A1" /> <!-- FIXME: value unconfirmed -->
+		<set name="operateType" val="A2" />
 		<set name="skillType" val="BUFF" />
 		<set name="targetType" val="AURA" />
 		<for>
@@ -945,7 +947,7 @@
 		<set name="abnormalType" val="PA_PD_UP" />
 		<set name="affectRange" val="200" />
 		<set name="hitTime" val="500" />
-		<set name="operateType" val="A1" /> <!-- FIXME: value unconfirmed -->
+		<set name="operateType" val="A2" />
 		<set name="skillType" val="BUFF" />
 		<set name="targetType" val="AURA" />
 		<for>
@@ -962,7 +964,7 @@
 		<set name="abnormalType" val="MAGIC_CRITICAL_UP" />
 		<set name="affectRange" val="200" />
 		<set name="hitTime" val="500" />
-		<set name="operateType" val="A1" /> <!-- FIXME: value unconfirmed -->
+		<set name="operateType" val="A2" />
 		<set name="skillType" val="BUFF" />
 		<set name="targetType" val="AURA" />
 		<for>
@@ -979,7 +981,7 @@
 		<set name="abnormalType" val="CHEAP_MAGIC" />
 		<set name="affectRange" val="200" />
 		<set name="hitTime" val="500" />
-		<set name="operateType" val="A1" /> <!-- FIXME: value unconfirmed -->
+		<set name="operateType" val="A2" />
 		<set name="skillType" val="BUFF" />
 		<set name="targetType" val="AURA" />
 		<for>
@@ -999,7 +1001,7 @@
 		<set name="affectRange" val="200" />
 		<set name="hitTime" val="500" />
 		<set name="magicLvl" val="78" />
-		<set name="operateType" val="A1" /> <!-- FIXME: value unconfirmed -->
+		<set name="operateType" val="A2" />
 		<set name="skillType" val="BUFF" />
 		<set name="targetType" val="AURA" />
 		<for>
@@ -1028,7 +1030,7 @@
 		<set name="abnormalType" val="MULTI_BUFF" />
 		<set name="affectRange" val="200" />
 		<set name="hitTime" val="500" />
-		<set name="operateType" val="A1" /> <!-- FIXME: value unconfirmed -->
+		<set name="operateType" val="A2" />
 		<set name="skillType" val="BUFF" />
 		<set name="targetType" val="AURA" />
 		<for>
@@ -1057,7 +1059,7 @@
 		<set name="abnormalType" val="MULTI_BUFF" />
 		<set name="affectRange" val="200" />
 		<set name="hitTime" val="500" />
-		<set name="operateType" val="A1" /> <!-- FIXME: value unconfirmed -->
+		<set name="operateType" val="A2" />
 		<set name="skillType" val="BUFF" />
 		<set name="targetType" val="AURA" />
 		<for>
@@ -1085,7 +1087,7 @@
 		<set name="abnormalType" val="MULTI_BUFF" />
 		<set name="affectRange" val="200" />
 		<set name="hitTime" val="500" />
-		<set name="operateType" val="A1" /> <!-- FIXME: value unconfirmed -->
+		<set name="operateType" val="A2" />
 		<set name="skillType" val="BUFF" />
 		<set name="targetType" val="AURA" />
 		<for>
@@ -1283,7 +1285,7 @@
 		<set name="affectRange" val="200" />
 		<set name="coolTime" val="500" />
 		<set name="hitTime" val="500" />
-		<set name="operateType" val="A1" /> <!-- FIXME: value unconfirmed -->
+		<set name="operateType" val="A2" />
 		<set name="skillType" val="BUFF" />
 		<set name="targetType" val="AURA" />
 		<for>
@@ -1306,7 +1308,7 @@
 		<set name="affectRange" val="200" />
 		<set name="coolTime" val="500" />
 		<set name="hitTime" val="4000" />
-		<set name="operateType" val="A1" /> <!-- FIXME: value unconfirmed -->
+		<set name="operateType" val="A2" />
 		<set name="skillType" val="BUFF" />
 		<set name="targetType" val="AURA" />
 		<for>
@@ -1326,7 +1328,7 @@
 		<set name="affectRange" val="200" />
 		<set name="canBeDispeled" val="false" />
 		<set name="hitTime" val="4000" />
-		<set name="operateType" val="A1" /> <!-- FIXME: value unconfirmed -->
+		<set name="operateType" val="A2" />
 		<set name="skillType" val="BUFF" />
 		<set name="targetType" val="AURA" />
 		<for>
@@ -1393,7 +1395,7 @@
 		<set name="abnormalType" val="MULTI_BUFF" />
 		<set name="affectRange" val="200" />
 		<set name="hitTime" val="500" />
-		<set name="operateType" val="A1" /> <!-- FIXME: value unconfirmed -->
+		<set name="operateType" val="A2" />
 		<set name="skillType" val="BUFF" />
 		<set name="targetType" val="AURA" />
 		<for>
@@ -1452,7 +1454,7 @@
 		<set name="affectRange" val="200" />
 		<set name="coolTime" val="500" />
 		<set name="hitTime" val="500" />
-		<set name="operateType" val="A1" /> <!-- FIXME: value unconfirmed -->
+		<set name="operateType" val="A2" />
 		<set name="skillType" val="BUFF" />
 		<set name="targetType" val="AURA" />
 		<for>
@@ -1475,7 +1477,7 @@
 		<set name="affectRange" val="200" />
 		<set name="coolTime" val="500" />
 		<set name="hitTime" val="500" />
-		<set name="operateType" val="A1" /> <!-- FIXME: value unconfirmed -->
+		<set name="operateType" val="A2" />
 		<set name="skillType" val="BUFF" />
 		<set name="targetType" val="AURA" />
 		<for>
@@ -1498,7 +1500,7 @@
 		<set name="affectRange" val="200" />
 		<set name="coolTime" val="500" />
 		<set name="hitTime" val="500" />
-		<set name="operateType" val="A1" /> <!-- FIXME: value unconfirmed -->
+		<set name="operateType" val="A2" />
 		<set name="skillType" val="BUFF" />
 		<set name="targetType" val="AURA" />
 		<for>
@@ -1521,7 +1523,7 @@
 		<set name="affectRange" val="200" />
 		<set name="coolTime" val="500" />
 		<set name="hitTime" val="500" />
-		<set name="operateType" val="A1" /> <!-- FIXME: value unconfirmed -->
+		<set name="operateType" val="A2" />
 		<set name="skillType" val="BUFF" />
 		<set name="targetType" val="AURA" />
 		<for>
@@ -1544,7 +1546,7 @@
 		<set name="affectRange" val="200" />
 		<set name="hitTime" val="500" />
 		<set name="magicLvl" val="81" />
-		<set name="operateType" val="A1" /> <!-- FIXME: value unconfirmed -->
+		<set name="operateType" val="A2" />
 		<set name="skillType" val="BUFF" />
 		<set name="targetType" val="AURA" />
 		<for>
@@ -1561,7 +1563,7 @@
 		<set name="abnormalType" val="MD_UP_ATTR" />
 		<set name="affectRange" val="200" />
 		<set name="hitTime" val="500" />
-		<set name="operateType" val="A1" /> <!-- FIXME: value unconfirmed -->
+		<set name="operateType" val="A2" />
 		<set name="skillType" val="BUFF" />
 		<set name="targetType" val="AURA" />
 		<for>
@@ -1581,7 +1583,7 @@
 		<set name="abnormalType" val="RESIST_DEBUFF_DISPEL" />
 		<set name="affectRange" val="200" />
 		<set name="hitTime" val="500" />
-		<set name="operateType" val="A1" /> <!-- FIXME: value unconfirmed -->
+		<set name="operateType" val="A2" />
 		<set name="skillType" val="BUFF" />
 		<set name="targetType" val="AURA" />
 		<for>