Преглед на файлове

# Major fixes:
* Big memory leak fixed, from over 170 million objects to zero!
* Reported by: @UnAfraid
* Fixed Blessed Spiritshot bonus not being applied.
* Fixed self-effect success being calculated with target instead of
caster.
* Dropped useless/unused effect support for items.
* Fixed NPE vulnerabilities in:
* `ConditionPlayerCanCreateOutpost`
* `ConditionPlayerCanSummonSiegeGolem`
* `ConditionPlayerCanCreateBase`
* `ConditionPlayerCanTakeCastle`
* `ConditionPlayerCanTakeFort`
* No more stats attached to skills, they must be defined on an effect.
* Removed BaseMul, now Mul with order 0x01 will replace it.
* Source cleanup.

Zoey76 преди 10 години
родител
ревизия
ac875a3457
променени са 100 файла, в които са добавени 739 реда и са изтрити 807 реда
  1. 1 1
      L2J_Server/java/com/l2jserver/gameserver/datatables/EnchantItemHPBonusData.java
  2. 1 1
      L2J_Server/java/com/l2jserver/gameserver/datatables/OptionsData.java
  3. 12 17
      L2J_Server/java/com/l2jserver/gameserver/engines/DocumentBase.java
  4. 7 7
      L2J_Server/java/com/l2jserver/gameserver/model/Elementals.java
  5. 22 29
      L2J_Server/java/com/l2jserver/gameserver/model/actor/L2Character.java
  6. 13 18
      L2J_Server/java/com/l2jserver/gameserver/model/actor/stat/CharStat.java
  7. 22 12
      L2J_Server/java/com/l2jserver/gameserver/model/conditions/Condition.java
  8. 5 3
      L2J_Server/java/com/l2jserver/gameserver/model/conditions/ConditionCategoryType.java
  9. 7 6
      L2J_Server/java/com/l2jserver/gameserver/model/conditions/ConditionChangeWeapon.java
  10. 4 3
      L2J_Server/java/com/l2jserver/gameserver/model/conditions/ConditionGameChance.java
  11. 4 3
      L2J_Server/java/com/l2jserver/gameserver/model/conditions/ConditionGameTime.java
  12. 4 3
      L2J_Server/java/com/l2jserver/gameserver/model/conditions/ConditionInventory.java
  13. 5 4
      L2J_Server/java/com/l2jserver/gameserver/model/conditions/ConditionItemId.java
  14. 5 20
      L2J_Server/java/com/l2jserver/gameserver/model/conditions/ConditionLogicAnd.java
  15. 5 12
      L2J_Server/java/com/l2jserver/gameserver/model/conditions/ConditionLogicNot.java
  16. 5 12
      L2J_Server/java/com/l2jserver/gameserver/model/conditions/ConditionLogicOr.java
  17. 5 3
      L2J_Server/java/com/l2jserver/gameserver/model/conditions/ConditionMinDistance.java
  18. 5 3
      L2J_Server/java/com/l2jserver/gameserver/model/conditions/ConditionPlayerActiveEffectId.java
  19. 4 3
      L2J_Server/java/com/l2jserver/gameserver/model/conditions/ConditionPlayerActiveSkillId.java
  20. 5 3
      L2J_Server/java/com/l2jserver/gameserver/model/conditions/ConditionPlayerAgathionId.java
  21. 5 5
      L2J_Server/java/com/l2jserver/gameserver/model/conditions/ConditionPlayerBaseStats.java
  22. 5 3
      L2J_Server/java/com/l2jserver/gameserver/model/conditions/ConditionPlayerCallPc.java
  23. 19 11
      L2J_Server/java/com/l2jserver/gameserver/model/conditions/ConditionPlayerCanCreateBase.java
  24. 13 7
      L2J_Server/java/com/l2jserver/gameserver/model/conditions/ConditionPlayerCanCreateOutpost.java
  25. 5 3
      L2J_Server/java/com/l2jserver/gameserver/model/conditions/ConditionPlayerCanEscape.java
  26. 5 3
      L2J_Server/java/com/l2jserver/gameserver/model/conditions/ConditionPlayerCanRefuelAirship.java
  27. 22 23
      L2J_Server/java/com/l2jserver/gameserver/model/conditions/ConditionPlayerCanResurrect.java
  28. 5 3
      L2J_Server/java/com/l2jserver/gameserver/model/conditions/ConditionPlayerCanSummon.java
  29. 14 7
      L2J_Server/java/com/l2jserver/gameserver/model/conditions/ConditionPlayerCanSummonSiegeGolem.java
  30. 7 7
      L2J_Server/java/com/l2jserver/gameserver/model/conditions/ConditionPlayerCanSweep.java
  31. 19 14
      L2J_Server/java/com/l2jserver/gameserver/model/conditions/ConditionPlayerCanTakeCastle.java
  32. 20 11
      L2J_Server/java/com/l2jserver/gameserver/model/conditions/ConditionPlayerCanTakeFort.java
  33. 5 3
      L2J_Server/java/com/l2jserver/gameserver/model/conditions/ConditionPlayerCanTransform.java
  34. 5 3
      L2J_Server/java/com/l2jserver/gameserver/model/conditions/ConditionPlayerCanUntransform.java
  35. 5 3
      L2J_Server/java/com/l2jserver/gameserver/model/conditions/ConditionPlayerCharges.java
  36. 5 3
      L2J_Server/java/com/l2jserver/gameserver/model/conditions/ConditionPlayerCheckAbnormal.java
  37. 5 3
      L2J_Server/java/com/l2jserver/gameserver/model/conditions/ConditionPlayerClassIdRestriction.java
  38. 5 3
      L2J_Server/java/com/l2jserver/gameserver/model/conditions/ConditionPlayerCloakStatus.java
  39. 5 3
      L2J_Server/java/com/l2jserver/gameserver/model/conditions/ConditionPlayerCp.java
  40. 5 3
      L2J_Server/java/com/l2jserver/gameserver/model/conditions/ConditionPlayerFlyMounted.java
  41. 5 3
      L2J_Server/java/com/l2jserver/gameserver/model/conditions/ConditionPlayerGrade.java
  42. 6 5
      L2J_Server/java/com/l2jserver/gameserver/model/conditions/ConditionPlayerHasCastle.java
  43. 6 5
      L2J_Server/java/com/l2jserver/gameserver/model/conditions/ConditionPlayerHasClanHall.java
  44. 6 5
      L2J_Server/java/com/l2jserver/gameserver/model/conditions/ConditionPlayerHasFort.java
  45. 6 4
      L2J_Server/java/com/l2jserver/gameserver/model/conditions/ConditionPlayerHasPet.java
  46. 5 3
      L2J_Server/java/com/l2jserver/gameserver/model/conditions/ConditionPlayerHp.java
  47. 9 7
      L2J_Server/java/com/l2jserver/gameserver/model/conditions/ConditionPlayerInsideZoneId.java
  48. 7 5
      L2J_Server/java/com/l2jserver/gameserver/model/conditions/ConditionPlayerInstanceId.java
  49. 6 4
      L2J_Server/java/com/l2jserver/gameserver/model/conditions/ConditionPlayerInvSize.java
  50. 6 4
      L2J_Server/java/com/l2jserver/gameserver/model/conditions/ConditionPlayerIsClanLeader.java
  51. 6 4
      L2J_Server/java/com/l2jserver/gameserver/model/conditions/ConditionPlayerIsHero.java
  52. 5 3
      L2J_Server/java/com/l2jserver/gameserver/model/conditions/ConditionPlayerLandingZone.java
  53. 5 3
      L2J_Server/java/com/l2jserver/gameserver/model/conditions/ConditionPlayerLevel.java
  54. 5 3
      L2J_Server/java/com/l2jserver/gameserver/model/conditions/ConditionPlayerLevelRange.java
  55. 5 3
      L2J_Server/java/com/l2jserver/gameserver/model/conditions/ConditionPlayerMp.java
  56. 6 4
      L2J_Server/java/com/l2jserver/gameserver/model/conditions/ConditionPlayerPkCount.java
  57. 6 5
      L2J_Server/java/com/l2jserver/gameserver/model/conditions/ConditionPlayerPledgeClass.java
  58. 6 4
      L2J_Server/java/com/l2jserver/gameserver/model/conditions/ConditionPlayerRace.java
  59. 4 3
      L2J_Server/java/com/l2jserver/gameserver/model/conditions/ConditionPlayerRangeFromNpc.java
  60. 6 4
      L2J_Server/java/com/l2jserver/gameserver/model/conditions/ConditionPlayerServitorNpcId.java
  61. 6 4
      L2J_Server/java/com/l2jserver/gameserver/model/conditions/ConditionPlayerSex.java
  62. 6 4
      L2J_Server/java/com/l2jserver/gameserver/model/conditions/ConditionPlayerSiegeSide.java
  63. 5 3
      L2J_Server/java/com/l2jserver/gameserver/model/conditions/ConditionPlayerSouls.java
  64. 5 7
      L2J_Server/java/com/l2jserver/gameserver/model/conditions/ConditionPlayerState.java
  65. 6 4
      L2J_Server/java/com/l2jserver/gameserver/model/conditions/ConditionPlayerSubclass.java
  66. 5 3
      L2J_Server/java/com/l2jserver/gameserver/model/conditions/ConditionPlayerTransformationId.java
  67. 5 3
      L2J_Server/java/com/l2jserver/gameserver/model/conditions/ConditionPlayerTvTEvent.java
  68. 6 4
      L2J_Server/java/com/l2jserver/gameserver/model/conditions/ConditionPlayerVehicleMounted.java
  69. 5 3
      L2J_Server/java/com/l2jserver/gameserver/model/conditions/ConditionPlayerWeight.java
  70. 4 3
      L2J_Server/java/com/l2jserver/gameserver/model/conditions/ConditionSiegeZone.java
  71. 9 8
      L2J_Server/java/com/l2jserver/gameserver/model/conditions/ConditionSlotItemId.java
  72. 9 8
      L2J_Server/java/com/l2jserver/gameserver/model/conditions/ConditionSlotItemType.java
  73. 5 3
      L2J_Server/java/com/l2jserver/gameserver/model/conditions/ConditionTargetAbnormal.java
  74. 5 3
      L2J_Server/java/com/l2jserver/gameserver/model/conditions/ConditionTargetActiveEffectId.java
  75. 4 3
      L2J_Server/java/com/l2jserver/gameserver/model/conditions/ConditionTargetActiveSkillId.java
  76. 7 7
      L2J_Server/java/com/l2jserver/gameserver/model/conditions/ConditionTargetAggro.java
  77. 9 7
      L2J_Server/java/com/l2jserver/gameserver/model/conditions/ConditionTargetClassIdRestriction.java
  78. 5 5
      L2J_Server/java/com/l2jserver/gameserver/model/conditions/ConditionTargetInvSize.java
  79. 6 4
      L2J_Server/java/com/l2jserver/gameserver/model/conditions/ConditionTargetLevel.java
  80. 6 4
      L2J_Server/java/com/l2jserver/gameserver/model/conditions/ConditionTargetLevelRange.java
  81. 8 8
      L2J_Server/java/com/l2jserver/gameserver/model/conditions/ConditionTargetMyPartyExceptMe.java
  82. 5 3
      L2J_Server/java/com/l2jserver/gameserver/model/conditions/ConditionTargetNone.java
  83. 9 7
      L2J_Server/java/com/l2jserver/gameserver/model/conditions/ConditionTargetNpcId.java
  84. 6 4
      L2J_Server/java/com/l2jserver/gameserver/model/conditions/ConditionTargetNpcType.java
  85. 5 3
      L2J_Server/java/com/l2jserver/gameserver/model/conditions/ConditionTargetPlayable.java
  86. 5 3
      L2J_Server/java/com/l2jserver/gameserver/model/conditions/ConditionTargetRace.java
  87. 8 6
      L2J_Server/java/com/l2jserver/gameserver/model/conditions/ConditionTargetUsesWeaponKind.java
  88. 5 5
      L2J_Server/java/com/l2jserver/gameserver/model/conditions/ConditionTargetWeight.java
  89. 5 4
      L2J_Server/java/com/l2jserver/gameserver/model/conditions/ConditionUsingItemType.java
  90. 6 4
      L2J_Server/java/com/l2jserver/gameserver/model/conditions/ConditionUsingSkill.java
  91. 6 4
      L2J_Server/java/com/l2jserver/gameserver/model/conditions/ConditionUsingSlotType.java
  92. 5 3
      L2J_Server/java/com/l2jserver/gameserver/model/conditions/ConditionWithSkill.java
  93. 20 15
      L2J_Server/java/com/l2jserver/gameserver/model/effects/AbstractEffect.java
  94. 16 77
      L2J_Server/java/com/l2jserver/gameserver/model/items/L2Item.java
  95. 2 11
      L2J_Server/java/com/l2jserver/gameserver/model/items/L2Weapon.java
  96. 2 2
      L2J_Server/java/com/l2jserver/gameserver/model/items/instance/L2ItemInstance.java
  97. 10 15
      L2J_Server/java/com/l2jserver/gameserver/model/options/Options.java
  98. 46 46
      L2J_Server/java/com/l2jserver/gameserver/model/skills/BuffInfo.java
  99. 16 40
      L2J_Server/java/com/l2jserver/gameserver/model/skills/Skill.java
  100. 0 92
      L2J_Server/java/com/l2jserver/gameserver/model/skills/funcs/Func.java

+ 1 - 1
L2J_Server/java/com/l2jserver/gameserver/datatables/EnchantItemHPBonusData.java

@@ -30,8 +30,8 @@ import com.l2jserver.gameserver.engines.DocumentParser;
 import com.l2jserver.gameserver.model.items.L2Item;
 import com.l2jserver.gameserver.model.items.instance.L2ItemInstance;
 import com.l2jserver.gameserver.model.items.type.CrystalType;
-import com.l2jserver.gameserver.model.skills.funcs.FuncTemplate;
 import com.l2jserver.gameserver.model.stats.Stats;
+import com.l2jserver.gameserver.model.stats.functions.FuncTemplate;
 
 /**
  * This class holds the Enchant HP Bonus Data.

+ 1 - 1
L2J_Server/java/com/l2jserver/gameserver/datatables/OptionsData.java

@@ -30,8 +30,8 @@ import com.l2jserver.gameserver.model.holders.SkillHolder;
 import com.l2jserver.gameserver.model.options.Options;
 import com.l2jserver.gameserver.model.options.OptionsSkillHolder;
 import com.l2jserver.gameserver.model.options.OptionsSkillType;
-import com.l2jserver.gameserver.model.skills.funcs.FuncTemplate;
 import com.l2jserver.gameserver.model.stats.Stats;
+import com.l2jserver.gameserver.model.stats.functions.FuncTemplate;
 
 /**
  * @author UnAfraid

+ 12 - 17
L2J_Server/java/com/l2jserver/gameserver/engines/DocumentBase.java

@@ -132,8 +132,8 @@ import com.l2jserver.gameserver.model.items.type.WeaponType;
 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;
 import com.l2jserver.gameserver.model.stats.Stats;
+import com.l2jserver.gameserver.model.stats.functions.FuncTemplate;
 
 /**
  * @author mkizub
@@ -239,11 +239,6 @@ public abstract class DocumentBase
 					attachFunc(n, template, "Mul", condition);
 					break;
 				}
-				case "basemul":
-				{
-					attachFunc(n, template, "BaseMul", condition);
-					break;
-				}
 				case "div":
 				{
 					attachFunc(n, template, "Div", condition);
@@ -297,21 +292,21 @@ public abstract class DocumentBase
 			value = Double.parseDouble(valueString);
 		}
 		
-		int ord = Integer.decode(getValue(order, template));
-		Condition applayCond = parseCondition(n.getFirstChild(), template);
-		FuncTemplate ft = new FuncTemplate(attachCond, applayCond, name, stat, ord, value);
+		final int ord = Integer.decode(getValue(order, template));
+		final Condition applayCond = parseCondition(n.getFirstChild(), template);
+		final FuncTemplate ft = new FuncTemplate(attachCond, applayCond, name, stat, ord, value);
 		if (template instanceof L2Item)
 		{
 			((L2Item) template).attach(ft);
 		}
-		else if (template instanceof Skill)
-		{
-			((Skill) template).attach(ft);
-		}
 		else if (template instanceof AbstractEffect)
 		{
 			((AbstractEffect) template).attach(ft);
 		}
+		else
+		{
+			throw new RuntimeException("Attaching stat to a non-effect template!!!");
+		}
 	}
 	
 	protected void attachEffect(Node n, Object template, Condition attachCond)
@@ -341,7 +336,7 @@ public abstract class DocumentBase
 		parseTemplate(n, effect);
 		if (template instanceof L2Item)
 		{
-			((L2Item) template).attach(effect);
+			_log.severe("Item " + template + " with effects!!!");
 		}
 		else if (template instanceof Skill)
 		{
@@ -908,7 +903,7 @@ public abstract class DocumentBase
 				case "insidezoneid":
 				{
 					StringTokenizer st = new StringTokenizer(a.getNodeValue(), ",");
-					ArrayList<Integer> array = new ArrayList<>(st.countTokens());
+					List<Integer> array = new ArrayList<>(st.countTokens());
 					while (st.hasMoreTokens())
 					{
 						String item = st.nextToken().trim();
@@ -1004,7 +999,7 @@ public abstract class DocumentBase
 				case "class_id_restriction":
 				{
 					StringTokenizer st = new StringTokenizer(a.getNodeValue(), ",");
-					ArrayList<Integer> array = new ArrayList<>(st.countTokens());
+					List<Integer> array = new ArrayList<>(st.countTokens());
 					while (st.hasMoreTokens())
 					{
 						String item = st.nextToken().trim();
@@ -1088,7 +1083,7 @@ public abstract class DocumentBase
 				case "npcid":
 				{
 					StringTokenizer st = new StringTokenizer(a.getNodeValue(), ",");
-					ArrayList<Integer> array = new ArrayList<>(st.countTokens());
+					List<Integer> array = new ArrayList<>(st.countTokens());
 					while (st.hasMoreTokens())
 					{
 						String item = st.nextToken().trim();

+ 7 - 7
L2J_Server/java/com/l2jserver/gameserver/model/Elementals.java

@@ -22,8 +22,8 @@ import java.util.HashMap;
 import java.util.Map;
 
 import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;
-import com.l2jserver.gameserver.model.skills.funcs.FuncAdd;
 import com.l2jserver.gameserver.model.stats.Stats;
+import com.l2jserver.gameserver.model.stats.functions.FuncAdd;
 
 public final class Elementals
 {
@@ -257,22 +257,22 @@ public final class Elementals
 			switch (_elementalType)
 			{
 				case FIRE:
-					player.addStatFunc(new FuncAdd(isArmor ? Stats.FIRE_RES : Stats.FIRE_POWER, 0x40, this, _elementalValue));
+					player.addStatFunc(new FuncAdd(isArmor ? Stats.FIRE_RES : Stats.FIRE_POWER, 0x40, this, _elementalValue, null));
 					break;
 				case WATER:
-					player.addStatFunc(new FuncAdd(isArmor ? Stats.WATER_RES : Stats.WATER_POWER, 0x40, this, _elementalValue));
+					player.addStatFunc(new FuncAdd(isArmor ? Stats.WATER_RES : Stats.WATER_POWER, 0x40, this, _elementalValue, null));
 					break;
 				case WIND:
-					player.addStatFunc(new FuncAdd(isArmor ? Stats.WIND_RES : Stats.WIND_POWER, 0x40, this, _elementalValue));
+					player.addStatFunc(new FuncAdd(isArmor ? Stats.WIND_RES : Stats.WIND_POWER, 0x40, this, _elementalValue, null));
 					break;
 				case EARTH:
-					player.addStatFunc(new FuncAdd(isArmor ? Stats.EARTH_RES : Stats.EARTH_POWER, 0x40, this, _elementalValue));
+					player.addStatFunc(new FuncAdd(isArmor ? Stats.EARTH_RES : Stats.EARTH_POWER, 0x40, this, _elementalValue, null));
 					break;
 				case DARK:
-					player.addStatFunc(new FuncAdd(isArmor ? Stats.DARK_RES : Stats.DARK_POWER, 0x40, this, _elementalValue));
+					player.addStatFunc(new FuncAdd(isArmor ? Stats.DARK_RES : Stats.DARK_POWER, 0x40, this, _elementalValue, null));
 					break;
 				case HOLY:
-					player.addStatFunc(new FuncAdd(isArmor ? Stats.HOLY_RES : Stats.HOLY_POWER, 0x40, this, _elementalValue));
+					player.addStatFunc(new FuncAdd(isArmor ? Stats.HOLY_RES : Stats.HOLY_POWER, 0x40, this, _elementalValue, null));
 					break;
 			}
 			

+ 22 - 29
L2J_Server/java/com/l2jserver/gameserver/model/actor/L2Character.java

@@ -122,13 +122,12 @@ import com.l2jserver.gameserver.model.skills.EffectScope;
 import com.l2jserver.gameserver.model.skills.Skill;
 import com.l2jserver.gameserver.model.skills.SkillChannelized;
 import com.l2jserver.gameserver.model.skills.SkillChannelizer;
-import com.l2jserver.gameserver.model.skills.funcs.Func;
 import com.l2jserver.gameserver.model.skills.targets.L2TargetType;
 import com.l2jserver.gameserver.model.stats.BaseStats;
 import com.l2jserver.gameserver.model.stats.Calculator;
-import com.l2jserver.gameserver.model.stats.Env;
 import com.l2jserver.gameserver.model.stats.Formulas;
 import com.l2jserver.gameserver.model.stats.Stats;
+import com.l2jserver.gameserver.model.stats.functions.AbstractFunction;
 import com.l2jserver.gameserver.model.zone.ZoneId;
 import com.l2jserver.gameserver.network.SystemMessageId;
 import com.l2jserver.gameserver.network.serverpackets.AbstractNpcInfo;
@@ -1997,13 +1996,7 @@ public abstract class L2Character extends L2Object implements ISkillsHolder, IDe
 		
 		if (skill.hasEffects(EffectScope.START))
 		{
-			final Env env = new Env();
-			env.setSkillMastery(Formulas.calcSkillMastery(this, skill));
-			env.setCharacter(this);
-			env.setTarget(target);
-			env.setSkill(skill);
-			final BuffInfo info = new BuffInfo(env);
-			skill.applyEffectScope(EffectScope.START, info, true, false);
+			skill.applyEffectScope(EffectScope.START, new BuffInfo(this, target, skill), true, false);
 		}
 		
 		// Before start AI Cast Broadcast Fly Effect is Need
@@ -3597,11 +3590,11 @@ public abstract class L2Character extends L2Object implements ISkillsHolder, IDe
 	 * <li>If _calculators is linked to NPC_STD_CALCULATOR, create a copy of NPC_STD_CALCULATOR in _calculators</li>
 	 * <li>Add the Func object to _calculators</li>
 	 * </ul>
-	 * @param f The Func object to add to the Calculator corresponding to the state affected
+	 * @param function The Func object to add to the Calculator corresponding to the state affected
 	 */
-	public final void addStatFunc(Func f)
+	public final void addStatFunc(AbstractFunction function)
 	{
-		if (f == null)
+		if (function == null)
 		{
 			return;
 		}
@@ -3624,7 +3617,7 @@ public abstract class L2Character extends L2Object implements ISkillsHolder, IDe
 			}
 			
 			// Select the Calculator of the affected state in the Calculator set
-			int stat = f.stat.ordinal();
+			int stat = function.getStat().ordinal();
 			
 			if (_calculators[stat] == null)
 			{
@@ -3632,7 +3625,7 @@ public abstract class L2Character extends L2Object implements ISkillsHolder, IDe
 			}
 			
 			// Add the Func to the calculator corresponding to the state
-			_calculators[stat].addFunc(f);
+			_calculators[stat].addFunc(function);
 		}
 	}
 	
@@ -3649,13 +3642,13 @@ public abstract class L2Character extends L2Object implements ISkillsHolder, IDe
 	 * <li>Learn a new passive skill</li>
 	 * <li>Use an active skill</li>
 	 * </ul>
-	 * @param funcs The list of Func objects to add to the Calculator corresponding to the state affected
+	 * @param functions The list of Func objects to add to the Calculator corresponding to the state affected
 	 */
-	public final void addStatFuncs(List<Func> funcs)
+	public final void addStatFuncs(List<AbstractFunction> functions)
 	{
 		if (!isPlayer() && getKnownList().getKnownPlayers().isEmpty())
 		{
-			for (Func f : funcs)
+			for (AbstractFunction f : functions)
 			{
 				addStatFunc(f);
 			}
@@ -3663,9 +3656,9 @@ public abstract class L2Character extends L2Object implements ISkillsHolder, IDe
 		else
 		{
 			final List<Stats> modifiedStats = new ArrayList<>();
-			for (Func f : funcs)
+			for (AbstractFunction f : functions)
 			{
-				modifiedStats.add(f.stat);
+				modifiedStats.add(f.getStat());
 				addStatFunc(f);
 			}
 			broadcastModifiedStats(modifiedStats);
@@ -3685,17 +3678,17 @@ public abstract class L2Character extends L2Object implements ISkillsHolder, IDe
 	 * <li>Remove the Func object from _calculators</li>
 	 * <li>If L2Character is a L2NPCInstance and _calculators is equal to NPC_STD_CALCULATOR, free cache memory and just create a link on NPC_STD_CALCULATOR in _calculators</li>
 	 * </ul>
-	 * @param f The Func object to remove from the Calculator corresponding to the state affected
+	 * @param function The Func object to remove from the Calculator corresponding to the state affected
 	 */
-	public final void removeStatFunc(Func f)
+	public final void removeStatFunc(AbstractFunction function)
 	{
-		if (f == null)
+		if (function == null)
 		{
 			return;
 		}
 		
 		// Select the Calculator of the affected state in the Calculator set
-		int stat = f.stat.ordinal();
+		int stat = function.getStat().ordinal();
 		
 		synchronized (this)
 		{
@@ -3705,7 +3698,7 @@ public abstract class L2Character extends L2Object implements ISkillsHolder, IDe
 			}
 			
 			// Remove the Func object from the Calculator
-			_calculators[stat].removeFunc(f);
+			_calculators[stat].removeFunc(function);
 			
 			if (_calculators[stat].size() == 0)
 			{
@@ -3744,13 +3737,13 @@ public abstract class L2Character extends L2Object implements ISkillsHolder, IDe
 	 * <li>Unequip an item from inventory</li>
 	 * <li>Stop an active skill</li>
 	 * </ul>
-	 * @param funcs The list of Func objects to add to the Calculator corresponding to the state affected
+	 * @param functions The list of Func objects to add to the Calculator corresponding to the state affected
 	 */
-	public final void removeStatFuncs(Func[] funcs)
+	public final void removeStatFuncs(AbstractFunction[] functions)
 	{
 		if (!isPlayer() && getKnownList().getKnownPlayers().isEmpty())
 		{
-			for (Func f : funcs)
+			for (AbstractFunction f : functions)
 			{
 				removeStatFunc(f);
 			}
@@ -3758,9 +3751,9 @@ public abstract class L2Character extends L2Object implements ISkillsHolder, IDe
 		else
 		{
 			final List<Stats> modifiedStats = new ArrayList<>();
-			for (Func f : funcs)
+			for (AbstractFunction f : functions)
 			{
-				modifiedStats.add(f.stat);
+				modifiedStats.add(f.getStat());
 				removeStatFunc(f);
 			}
 			

+ 13 - 18
L2J_Server/java/com/l2jserver/gameserver/model/actor/stat/CharStat.java

@@ -28,7 +28,6 @@ import com.l2jserver.gameserver.model.items.L2Weapon;
 import com.l2jserver.gameserver.model.items.instance.L2ItemInstance;
 import com.l2jserver.gameserver.model.skills.Skill;
 import com.l2jserver.gameserver.model.stats.Calculator;
-import com.l2jserver.gameserver.model.stats.Env;
 import com.l2jserver.gameserver.model.stats.MoveType;
 import com.l2jserver.gameserver.model.stats.Stats;
 import com.l2jserver.gameserver.model.stats.TraitType;
@@ -69,26 +68,26 @@ public class CharStat
 	 * Indeed, Func with lowest priority order is executed firsta and Funcs with the same order are executed in unspecified order.<br>
 	 * The result of the calculation is stored in the value property of an Env class instance.<br>
 	 * @param stat The stat to calculate the new value with modifiers
-	 * @param init The initial value of the stat before applying modifiers
+	 * @param initVal The initial value of the stat before applying modifiers
 	 * @param target The L2Charcater whose properties will be used in the calculation (ex : CON, INT...)
 	 * @param skill The L2Skill whose properties will be used in the calculation (ex : Level...)
 	 * @return
 	 */
-	public final double calcStat(Stats stat, double init, L2Character target, Skill skill)
+	public final double calcStat(Stats stat, double initVal, L2Character target, Skill skill)
 	{
+		double value = initVal;
 		if (stat == null)
 		{
-			return init;
+			return value;
 		}
 		
 		final int id = stat.ordinal();
-		
 		final Calculator c = _activeChar.getCalculators()[id];
 		
 		// If no Func object found, no modifier is applied
 		if ((c == null) || (c.size() == 0))
 		{
-			return init;
+			return value;
 		}
 		
 		// Apply transformation stats.
@@ -97,22 +96,15 @@ public class CharStat
 			double val = getActiveChar().getTransformation().getStat(getActiveChar().getActingPlayer(), stat);
 			if (val > 0)
 			{
-				init = val;
+				value = val;
 			}
 		}
 		
-		// Create and init an Env object to pass parameters to the Calculator
-		final Env env = new Env();
-		env.setCharacter(_activeChar);
-		env.setTarget(target);
-		env.setSkill(skill);
-		env.setValue(init);
-		
 		// Launch the calculation
-		c.calc(env);
+		value = c.calc(_activeChar, target, skill, value);
 		
 		// avoid some troubles with negative stats (some stats should never be negative)
-		if (env.getValue() <= 0)
+		if (value <= 0)
 		{
 			switch (stat)
 			{
@@ -132,10 +124,13 @@ public class CharStat
 				case STAT_MEN:
 				case STAT_STR:
 				case STAT_WIT:
-					env.setValue(1);
+				{
+					value = 1.0;
+					break;
+				}
 			}
 		}
-		return env.getValue();
+		return value;
 	}
 	
 	/**

+ 22 - 12
L2J_Server/java/com/l2jserver/gameserver/model/conditions/Condition.java

@@ -18,7 +18,9 @@
  */
 package com.l2jserver.gameserver.model.conditions;
 
-import com.l2jserver.gameserver.model.stats.Env;
+import com.l2jserver.gameserver.model.actor.L2Character;
+import com.l2jserver.gameserver.model.items.L2Item;
+import com.l2jserver.gameserver.model.skills.Skill;
 
 /**
  * The Class Condition.
@@ -104,14 +106,19 @@ public abstract class Condition implements ConditionListener
 		return _listener;
 	}
 	
-	/**
-	 * Test.
-	 * @param env the env
-	 * @return true, if successful
-	 */
-	public final boolean test(Env env)
+	public final boolean test(L2Character caster, L2Character target, Skill skill)
+	{
+		return test(caster, target, skill, null);
+	}
+	
+	public final boolean test(L2Character caster, L2Character target, L2Item item)
+	{
+		return test(caster, target, null, null);
+	}
+	
+	public final boolean test(L2Character caster, L2Character target, Skill skill, L2Item item)
 	{
-		boolean res = testImpl(env);
+		boolean res = testImpl(caster, target, skill, item);
 		if ((_listener != null) && (res != _result))
 		{
 			_result = res;
@@ -121,11 +128,14 @@ public abstract class Condition implements ConditionListener
 	}
 	
 	/**
-	 * Test impl.
-	 * @param env the env
-	 * @return true, if successful
+	 * Test the condition.
+	 * @param effector the effector
+	 * @param effected the effected
+	 * @param skill the skill
+	 * @param item the item
+	 * @return {@code true} if successful, {@code false} otherwise
 	 */
-	public abstract boolean testImpl(Env env);
+	public abstract boolean testImpl(L2Character effector, L2Character effected, Skill skill, L2Item item);
 	
 	@Override
 	public void notifyChanged()

+ 5 - 3
L2J_Server/java/com/l2jserver/gameserver/model/conditions/ConditionCategoryType.java

@@ -21,7 +21,9 @@ package com.l2jserver.gameserver.model.conditions;
 import java.util.Set;
 
 import com.l2jserver.gameserver.enums.CategoryType;
-import com.l2jserver.gameserver.model.stats.Env;
+import com.l2jserver.gameserver.model.actor.L2Character;
+import com.l2jserver.gameserver.model.items.L2Item;
+import com.l2jserver.gameserver.model.skills.Skill;
 
 /**
  * Condition Category Type implementation.
@@ -37,11 +39,11 @@ public class ConditionCategoryType extends Condition
 	}
 	
 	@Override
-	public boolean testImpl(Env env)
+	public boolean testImpl(L2Character effector, L2Character effected, Skill skill, L2Item item)
 	{
 		for (CategoryType type : _categoryTypes)
 		{
-			if (env.getCharacter().isInCategory(type))
+			if (effector.isInCategory(type))
 			{
 				return true;
 			}

+ 7 - 6
L2J_Server/java/com/l2jserver/gameserver/model/conditions/ConditionChangeWeapon.java

@@ -18,8 +18,10 @@
  */
 package com.l2jserver.gameserver.model.conditions;
 
+import com.l2jserver.gameserver.model.actor.L2Character;
+import com.l2jserver.gameserver.model.items.L2Item;
 import com.l2jserver.gameserver.model.items.L2Weapon;
-import com.l2jserver.gameserver.model.stats.Env;
+import com.l2jserver.gameserver.model.skills.Skill;
 
 /**
  * The Class ConditionChangeWeapon.
@@ -40,20 +42,19 @@ public class ConditionChangeWeapon extends Condition
 	
 	/**
 	 * Test impl.
-	 * @param env the env
 	 * @return true, if successful
 	 */
 	@Override
-	public boolean testImpl(Env env)
+	public boolean testImpl(L2Character effector, L2Character effected, Skill skill, L2Item item)
 	{
-		if (env.getPlayer() == null)
+		if (effector.getActingPlayer() == null)
 		{
 			return false;
 		}
 		
 		if (_required)
 		{
-			final L2Weapon weaponItem = env.getPlayer().getActiveWeaponItem();
+			final L2Weapon weaponItem = effector.getActiveWeaponItem();
 			if (weaponItem == null)
 			{
 				return false;
@@ -64,7 +65,7 @@ public class ConditionChangeWeapon extends Condition
 				return false;
 			}
 			
-			if (env.getPlayer().isEnchanting())
+			if (effector.getActingPlayer().isEnchanting())
 			{
 				return false;
 			}

+ 4 - 3
L2J_Server/java/com/l2jserver/gameserver/model/conditions/ConditionGameChance.java

@@ -18,7 +18,9 @@
  */
 package com.l2jserver.gameserver.model.conditions;
 
-import com.l2jserver.gameserver.model.stats.Env;
+import com.l2jserver.gameserver.model.actor.L2Character;
+import com.l2jserver.gameserver.model.items.L2Item;
+import com.l2jserver.gameserver.model.skills.Skill;
 import com.l2jserver.util.Rnd;
 
 /**
@@ -40,11 +42,10 @@ public class ConditionGameChance extends Condition
 	
 	/**
 	 * Test impl.
-	 * @param env the env
 	 * @return true, if successful
 	 */
 	@Override
-	public boolean testImpl(Env env)
+	public boolean testImpl(L2Character effector, L2Character effected, Skill skill, L2Item item)
 	{
 		return Rnd.get(100) < _chance;
 	}

+ 4 - 3
L2J_Server/java/com/l2jserver/gameserver/model/conditions/ConditionGameTime.java

@@ -19,7 +19,9 @@
 package com.l2jserver.gameserver.model.conditions;
 
 import com.l2jserver.gameserver.GameTimeController;
-import com.l2jserver.gameserver.model.stats.Env;
+import com.l2jserver.gameserver.model.actor.L2Character;
+import com.l2jserver.gameserver.model.items.L2Item;
+import com.l2jserver.gameserver.model.skills.Skill;
 
 /**
  * The Class ConditionGameTime.
@@ -51,11 +53,10 @@ public class ConditionGameTime extends Condition
 	
 	/**
 	 * Test impl.
-	 * @param env the env
 	 * @return true, if successful
 	 */
 	@Override
-	public boolean testImpl(Env env)
+	public boolean testImpl(L2Character effector, L2Character effected, Skill skill, L2Item item)
 	{
 		switch (_check)
 		{

+ 4 - 3
L2J_Server/java/com/l2jserver/gameserver/model/conditions/ConditionInventory.java

@@ -18,7 +18,9 @@
  */
 package com.l2jserver.gameserver.model.conditions;
 
-import com.l2jserver.gameserver.model.stats.Env;
+import com.l2jserver.gameserver.model.actor.L2Character;
+import com.l2jserver.gameserver.model.items.L2Item;
+import com.l2jserver.gameserver.model.skills.Skill;
 
 /**
  * The Class ConditionInventory.
@@ -40,9 +42,8 @@ public abstract class ConditionInventory extends Condition
 	
 	/**
 	 * Test impl.
-	 * @param env the env
 	 * @return true, if successful
 	 */
 	@Override
-	public abstract boolean testImpl(Env env);
+	public abstract boolean testImpl(L2Character effector, L2Character effected, Skill skill, L2Item item);
 }

+ 5 - 4
L2J_Server/java/com/l2jserver/gameserver/model/conditions/ConditionItemId.java

@@ -18,7 +18,9 @@
  */
 package com.l2jserver.gameserver.model.conditions;
 
-import com.l2jserver.gameserver.model.stats.Env;
+import com.l2jserver.gameserver.model.actor.L2Character;
+import com.l2jserver.gameserver.model.items.L2Item;
+import com.l2jserver.gameserver.model.skills.Skill;
 
 /**
  * The Class ConditionItemId.
@@ -39,12 +41,11 @@ public final class ConditionItemId extends Condition
 	
 	/**
 	 * Test impl.
-	 * @param env the env
 	 * @return true, if successful
 	 */
 	@Override
-	public boolean testImpl(Env env)
+	public boolean testImpl(L2Character effector, L2Character effected, Skill skill, L2Item item)
 	{
-		return (env.getItem() != null) && (env.getItem().getId() == _itemId);
+		return (item != null) && (item.getId() == _itemId);
 	}
 }

+ 5 - 20
L2J_Server/java/com/l2jserver/gameserver/model/conditions/ConditionLogicAnd.java

@@ -18,7 +18,9 @@
  */
 package com.l2jserver.gameserver.model.conditions;
 
-import com.l2jserver.gameserver.model.stats.Env;
+import com.l2jserver.gameserver.model.actor.L2Character;
+import com.l2jserver.gameserver.model.items.L2Item;
+import com.l2jserver.gameserver.model.skills.Skill;
 
 /**
  * The Class ConditionLogicAnd.
@@ -29,14 +31,6 @@ public class ConditionLogicAnd extends Condition
 	private static Condition[] _emptyConditions = new Condition[0];
 	public Condition[] conditions = _emptyConditions;
 	
-	/**
-	 * Instantiates a new condition logic and.
-	 */
-	public ConditionLogicAnd()
-	{
-		super();
-	}
-	
 	/**
 	 * Adds the.
 	 * @param condition the condition
@@ -58,10 +52,6 @@ public class ConditionLogicAnd extends Condition
 		conditions = tmp;
 	}
 	
-	/**
-	 * Sets the listener.
-	 * @param listener the new listener
-	 */
 	@Override
 	void setListener(ConditionListener listener)
 	{
@@ -82,17 +72,12 @@ public class ConditionLogicAnd extends Condition
 		super.setListener(listener);
 	}
 	
-	/**
-	 * Test impl.
-	 * @param env the env
-	 * @return true, if successful
-	 */
 	@Override
-	public boolean testImpl(Env env)
+	public boolean testImpl(L2Character effector, L2Character effected, Skill skill, L2Item item)
 	{
 		for (Condition c : conditions)
 		{
-			if (!c.test(env))
+			if (!c.test(effector, effected, skill, item))
 			{
 				return false;
 			}

+ 5 - 12
L2J_Server/java/com/l2jserver/gameserver/model/conditions/ConditionLogicNot.java

@@ -18,7 +18,9 @@
  */
 package com.l2jserver.gameserver.model.conditions;
 
-import com.l2jserver.gameserver.model.stats.Env;
+import com.l2jserver.gameserver.model.actor.L2Character;
+import com.l2jserver.gameserver.model.items.L2Item;
+import com.l2jserver.gameserver.model.skills.Skill;
 
 /**
  * The Class ConditionLogicNot.
@@ -41,10 +43,6 @@ public class ConditionLogicNot extends Condition
 		}
 	}
 	
-	/**
-	 * Sets the listener.
-	 * @param listener the new listener
-	 */
 	@Override
 	void setListener(ConditionListener listener)
 	{
@@ -59,14 +57,9 @@ public class ConditionLogicNot extends Condition
 		super.setListener(listener);
 	}
 	
-	/**
-	 * Test impl.
-	 * @param env the env
-	 * @return true, if successful
-	 */
 	@Override
-	public boolean testImpl(Env env)
+	public boolean testImpl(L2Character effector, L2Character effected, Skill skill, L2Item item)
 	{
-		return !_condition.test(env);
+		return !_condition.test(effector, effected, skill, item);
 	}
 }

+ 5 - 12
L2J_Server/java/com/l2jserver/gameserver/model/conditions/ConditionLogicOr.java

@@ -18,7 +18,9 @@
  */
 package com.l2jserver.gameserver.model.conditions;
 
-import com.l2jserver.gameserver.model.stats.Env;
+import com.l2jserver.gameserver.model.actor.L2Character;
+import com.l2jserver.gameserver.model.items.L2Item;
+import com.l2jserver.gameserver.model.skills.Skill;
 
 /**
  * The Class ConditionLogicOr.
@@ -50,10 +52,6 @@ public class ConditionLogicOr extends Condition
 		conditions = tmp;
 	}
 	
-	/**
-	 * Sets the listener.
-	 * @param listener the new listener
-	 */
 	@Override
 	void setListener(ConditionListener listener)
 	{
@@ -74,17 +72,12 @@ public class ConditionLogicOr extends Condition
 		super.setListener(listener);
 	}
 	
-	/**
-	 * Test impl.
-	 * @param env the env
-	 * @return true, if successful
-	 */
 	@Override
-	public boolean testImpl(Env env)
+	public boolean testImpl(L2Character effector, L2Character effected, Skill skill, L2Item item)
 	{
 		for (Condition c : conditions)
 		{
-			if (c.test(env))
+			if (c.test(effector, effected, skill, item))
 			{
 				return true;
 			}

+ 5 - 3
L2J_Server/java/com/l2jserver/gameserver/model/conditions/ConditionMinDistance.java

@@ -18,7 +18,9 @@
  */
 package com.l2jserver.gameserver.model.conditions;
 
-import com.l2jserver.gameserver.model.stats.Env;
+import com.l2jserver.gameserver.model.actor.L2Character;
+import com.l2jserver.gameserver.model.items.L2Item;
+import com.l2jserver.gameserver.model.skills.Skill;
 
 /**
  * The Class ConditionMinDistance.
@@ -38,8 +40,8 @@ public class ConditionMinDistance extends Condition
 	}
 	
 	@Override
-	public boolean testImpl(Env env)
+	public boolean testImpl(L2Character effector, L2Character effected, Skill skill, L2Item item)
 	{
-		return (env.getTarget() != null) && (env.getCharacter().calculateDistance(env.getTarget(), true, true) >= _sqDistance);
+		return (effected != null) && (effector.calculateDistance(effected, true, true) >= _sqDistance);
 	}
 }

+ 5 - 3
L2J_Server/java/com/l2jserver/gameserver/model/conditions/ConditionPlayerActiveEffectId.java

@@ -18,8 +18,10 @@
  */
 package com.l2jserver.gameserver.model.conditions;
 
+import com.l2jserver.gameserver.model.actor.L2Character;
+import com.l2jserver.gameserver.model.items.L2Item;
 import com.l2jserver.gameserver.model.skills.BuffInfo;
-import com.l2jserver.gameserver.model.stats.Env;
+import com.l2jserver.gameserver.model.skills.Skill;
 
 /**
  * The Class ConditionPlayerActiveEffectId.
@@ -52,9 +54,9 @@ public class ConditionPlayerActiveEffectId extends Condition
 	}
 	
 	@Override
-	public boolean testImpl(Env env)
+	public boolean testImpl(L2Character effector, L2Character effected, Skill skill, L2Item item)
 	{
-		final BuffInfo info = env.getCharacter().getEffectList().getBuffInfoBySkillId(_effectId);
+		final BuffInfo info = effector.getEffectList().getBuffInfoBySkillId(_effectId);
 		return ((info != null) && ((_effectLvl == -1) || (_effectLvl <= info.getSkill().getLevel())));
 	}
 }

+ 4 - 3
L2J_Server/java/com/l2jserver/gameserver/model/conditions/ConditionPlayerActiveSkillId.java

@@ -18,8 +18,9 @@
  */
 package com.l2jserver.gameserver.model.conditions;
 
+import com.l2jserver.gameserver.model.actor.L2Character;
+import com.l2jserver.gameserver.model.items.L2Item;
 import com.l2jserver.gameserver.model.skills.Skill;
-import com.l2jserver.gameserver.model.stats.Env;
 
 /**
  * The Class ConditionPlayerActiveSkillId.
@@ -52,9 +53,9 @@ public class ConditionPlayerActiveSkillId extends Condition
 	}
 	
 	@Override
-	public boolean testImpl(Env env)
+	public boolean testImpl(L2Character effector, L2Character effected, Skill skill, L2Item item)
 	{
-		for (Skill sk : env.getCharacter().getAllSkills())
+		for (Skill sk : effector.getAllSkills())
 		{
 			if (sk != null)
 			{

+ 5 - 3
L2J_Server/java/com/l2jserver/gameserver/model/conditions/ConditionPlayerAgathionId.java

@@ -18,7 +18,9 @@
  */
 package com.l2jserver.gameserver.model.conditions;
 
-import com.l2jserver.gameserver.model.stats.Env;
+import com.l2jserver.gameserver.model.actor.L2Character;
+import com.l2jserver.gameserver.model.items.L2Item;
+import com.l2jserver.gameserver.model.skills.Skill;
 
 /**
  * The Class ConditionPlayerAgathionId.
@@ -37,8 +39,8 @@ public class ConditionPlayerAgathionId extends Condition
 	}
 	
 	@Override
-	public boolean testImpl(Env env)
+	public boolean testImpl(L2Character effector, L2Character effected, Skill skill, L2Item item)
 	{
-		return (env.getPlayer() != null) && (env.getPlayer().getAgathionId() == _agathionId);
+		return (effector.getActingPlayer() != null) && (effector.getActingPlayer().getAgathionId() == _agathionId);
 	}
 }

+ 5 - 5
L2J_Server/java/com/l2jserver/gameserver/model/conditions/ConditionPlayerBaseStats.java

@@ -20,7 +20,8 @@ package com.l2jserver.gameserver.model.conditions;
 
 import com.l2jserver.gameserver.model.actor.L2Character;
 import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;
-import com.l2jserver.gameserver.model.stats.Env;
+import com.l2jserver.gameserver.model.items.L2Item;
+import com.l2jserver.gameserver.model.skills.Skill;
 
 /**
  * The Class ConditionPlayerBaseStats.
@@ -47,17 +48,16 @@ public class ConditionPlayerBaseStats extends Condition
 	
 	/**
 	 * Test impl.
-	 * @param env the env
 	 * @return true, if successful
 	 */
 	@Override
-	public boolean testImpl(Env env)
+	public boolean testImpl(L2Character effector, L2Character effected, Skill skill, L2Item item)
 	{
-		if (env.getPlayer() == null)
+		if (effector.getActingPlayer() == null)
 		{
 			return false;
 		}
-		final L2PcInstance player = env.getPlayer();
+		final L2PcInstance player = effector.getActingPlayer();
 		switch (_stat)
 		{
 			case Int:

+ 5 - 3
L2J_Server/java/com/l2jserver/gameserver/model/conditions/ConditionPlayerCallPc.java

@@ -18,9 +18,11 @@
  */
 package com.l2jserver.gameserver.model.conditions;
 
+import com.l2jserver.gameserver.model.actor.L2Character;
 import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;
 import com.l2jserver.gameserver.model.entity.TvTEvent;
-import com.l2jserver.gameserver.model.stats.Env;
+import com.l2jserver.gameserver.model.items.L2Item;
+import com.l2jserver.gameserver.model.skills.Skill;
 import com.l2jserver.gameserver.model.zone.ZoneId;
 import com.l2jserver.gameserver.network.SystemMessageId;
 
@@ -38,10 +40,10 @@ public class ConditionPlayerCallPc extends Condition
 	}
 	
 	@Override
-	public boolean testImpl(Env env)
+	public boolean testImpl(L2Character effector, L2Character effected, Skill skill, L2Item item)
 	{
 		boolean canCallPlayer = true;
-		final L2PcInstance player = env.getPlayer();
+		final L2PcInstance player = effector.getActingPlayer();
 		if (player == null)
 		{
 			canCallPlayer = false;

+ 19 - 11
L2J_Server/java/com/l2jserver/gameserver/model/conditions/ConditionPlayerCanCreateBase.java

@@ -22,10 +22,12 @@ import com.l2jserver.gameserver.instancemanager.CastleManager;
 import com.l2jserver.gameserver.instancemanager.FortManager;
 import com.l2jserver.gameserver.instancemanager.FortSiegeManager;
 import com.l2jserver.gameserver.instancemanager.SiegeManager;
+import com.l2jserver.gameserver.model.actor.L2Character;
 import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;
 import com.l2jserver.gameserver.model.entity.Castle;
 import com.l2jserver.gameserver.model.entity.Fort;
-import com.l2jserver.gameserver.model.stats.Env;
+import com.l2jserver.gameserver.model.items.L2Item;
+import com.l2jserver.gameserver.model.skills.Skill;
 import com.l2jserver.gameserver.model.zone.ZoneId;
 import com.l2jserver.gameserver.network.SystemMessageId;
 import com.l2jserver.gameserver.network.serverpackets.SystemMessage;
@@ -44,49 +46,55 @@ public class ConditionPlayerCanCreateBase extends Condition
 	}
 	
 	@Override
-	public boolean testImpl(Env env)
+	public boolean testImpl(L2Character effector, L2Character effected, Skill skill, L2Item item)
 	{
+		if ((effector == null) || !effector.isPlayer())
+		{
+			return !_val;
+		}
+		
+		final L2PcInstance player = effector.getActingPlayer();
 		boolean canCreateBase = true;
-		if ((env.getPlayer() == null) || env.getPlayer().isAlikeDead() || env.getPlayer().isCursedWeaponEquipped() || (env.getPlayer().getClan() == null))
+		if (player.isAlikeDead() || player.isCursedWeaponEquipped() || (player.getClan() == null))
 		{
 			canCreateBase = false;
 		}
-		final Castle castle = CastleManager.getInstance().getCastle(env.getPlayer());
-		final Fort fort = FortManager.getInstance().getFort(env.getPlayer());
+		
+		final Castle castle = CastleManager.getInstance().getCastle(player);
+		final Fort fort = FortManager.getInstance().getFort(player);
 		final SystemMessage sm;
-		L2PcInstance player = env.getPlayer().getActingPlayer();
 		if ((castle == null) && (fort == null))
 		{
 			sm = SystemMessage.getSystemMessage(SystemMessageId.S1_CANNOT_BE_USED);
-			sm.addSkillName(env.getSkill());
+			sm.addSkillName(skill);
 			player.sendPacket(sm);
 			canCreateBase = false;
 		}
 		else if (((castle != null) && !castle.getSiege().isInProgress()) || ((fort != null) && !fort.getSiege().isInProgress()))
 		{
 			sm = SystemMessage.getSystemMessage(SystemMessageId.S1_CANNOT_BE_USED);
-			sm.addSkillName(env.getSkill());
+			sm.addSkillName(skill);
 			player.sendPacket(sm);
 			canCreateBase = false;
 		}
 		else if (((castle != null) && (castle.getSiege().getAttackerClan(player.getClan()) == null)) || ((fort != null) && (fort.getSiege().getAttackerClan(player.getClan()) == null)))
 		{
 			sm = SystemMessage.getSystemMessage(SystemMessageId.S1_CANNOT_BE_USED);
-			sm.addSkillName(env.getSkill());
+			sm.addSkillName(skill);
 			player.sendPacket(sm);
 			canCreateBase = false;
 		}
 		else if (!player.isClanLeader())
 		{
 			sm = SystemMessage.getSystemMessage(SystemMessageId.S1_CANNOT_BE_USED);
-			sm.addSkillName(env.getSkill());
+			sm.addSkillName(skill);
 			player.sendPacket(sm);
 			canCreateBase = false;
 		}
 		else if (((castle != null) && (castle.getSiege().getAttackerClan(player.getClan()).getNumFlags() >= SiegeManager.getInstance().getFlagMaxCount())) || ((fort != null) && (fort.getSiege().getAttackerClan(player.getClan()).getNumFlags() >= FortSiegeManager.getInstance().getFlagMaxCount())))
 		{
 			sm = SystemMessage.getSystemMessage(SystemMessageId.S1_CANNOT_BE_USED);
-			sm.addSkillName(env.getSkill());
+			sm.addSkillName(skill);
 			player.sendPacket(sm);
 			canCreateBase = false;
 		}

+ 13 - 7
L2J_Server/java/com/l2jserver/gameserver/model/conditions/ConditionPlayerCanCreateOutpost.java

@@ -21,10 +21,12 @@ package com.l2jserver.gameserver.model.conditions;
 import com.l2jserver.gameserver.instancemanager.CastleManager;
 import com.l2jserver.gameserver.instancemanager.FortManager;
 import com.l2jserver.gameserver.instancemanager.TerritoryWarManager;
+import com.l2jserver.gameserver.model.actor.L2Character;
 import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;
 import com.l2jserver.gameserver.model.entity.Castle;
 import com.l2jserver.gameserver.model.entity.Fort;
-import com.l2jserver.gameserver.model.stats.Env;
+import com.l2jserver.gameserver.model.items.L2Item;
+import com.l2jserver.gameserver.model.skills.Skill;
 import com.l2jserver.gameserver.model.zone.ZoneId;
 import com.l2jserver.gameserver.network.SystemMessageId;
 
@@ -42,23 +44,27 @@ public class ConditionPlayerCanCreateOutpost extends Condition
 	}
 	
 	@Override
-	public boolean testImpl(Env env)
+	public boolean testImpl(L2Character effector, L2Character effected, Skill skill, L2Item item)
 	{
+		if ((effector == null) || !effector.isPlayer())
+		{
+			return !_val;
+		}
+		
+		final L2PcInstance player = effector.getActingPlayer();
 		boolean canCreateOutpost = true;
-		if ((env.getPlayer() == null) || env.getPlayer().isAlikeDead() || env.getPlayer().isCursedWeaponEquipped() || (env.getPlayer().getClan() == null))
+		if (player.isAlikeDead() || player.isCursedWeaponEquipped() || (player.getClan() == null))
 		{
 			canCreateOutpost = false;
 		}
 		
-		final Castle castle = CastleManager.getInstance().getCastle(env.getPlayer());
-		final Fort fort = FortManager.getInstance().getFort(env.getPlayer());
-		
+		final Castle castle = CastleManager.getInstance().getCastle(player);
+		final Fort fort = FortManager.getInstance().getFort(player);
 		if ((castle == null) && (fort == null))
 		{
 			canCreateOutpost = false;
 		}
 		
-		L2PcInstance player = env.getPlayer().getActingPlayer();
 		if (((fort != null) && (fort.getResidenceId() == 0)) || ((castle != null) && (castle.getResidenceId() == 0)))
 		{
 			player.sendMessage("You must be on fort or castle ground to construct an outpost or flag.");

+ 5 - 3
L2J_Server/java/com/l2jserver/gameserver/model/conditions/ConditionPlayerCanEscape.java

@@ -20,9 +20,11 @@ package com.l2jserver.gameserver.model.conditions;
 
 import com.l2jserver.gameserver.instancemanager.GrandBossManager;
 import com.l2jserver.gameserver.model.PcCondOverride;
+import com.l2jserver.gameserver.model.actor.L2Character;
 import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;
 import com.l2jserver.gameserver.model.entity.TvTEvent;
-import com.l2jserver.gameserver.model.stats.Env;
+import com.l2jserver.gameserver.model.items.L2Item;
+import com.l2jserver.gameserver.model.skills.Skill;
 
 /**
  * Player Can Escape condition implementation.
@@ -38,10 +40,10 @@ public class ConditionPlayerCanEscape extends Condition
 	}
 	
 	@Override
-	public boolean testImpl(Env env)
+	public boolean testImpl(L2Character effector, L2Character effected, Skill skill, L2Item item)
 	{
 		boolean canTeleport = true;
-		final L2PcInstance player = env.getPlayer();
+		final L2PcInstance player = effector.getActingPlayer();
 		if (player == null)
 		{
 			canTeleport = false;

+ 5 - 3
L2J_Server/java/com/l2jserver/gameserver/model/conditions/ConditionPlayerCanRefuelAirship.java

@@ -18,9 +18,11 @@
  */
 package com.l2jserver.gameserver.model.conditions;
 
+import com.l2jserver.gameserver.model.actor.L2Character;
 import com.l2jserver.gameserver.model.actor.instance.L2ControllableAirShipInstance;
 import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;
-import com.l2jserver.gameserver.model.stats.Env;
+import com.l2jserver.gameserver.model.items.L2Item;
+import com.l2jserver.gameserver.model.skills.Skill;
 
 /**
  * Player Can Refuel Airship condition implementation.
@@ -36,10 +38,10 @@ public class ConditionPlayerCanRefuelAirship extends Condition
 	}
 	
 	@Override
-	public boolean testImpl(Env env)
+	public boolean testImpl(L2Character effector, L2Character effected, Skill skill, L2Item item)
 	{
 		boolean canRefuelAirship = true;
-		final L2PcInstance player = env.getPlayer();
+		final L2PcInstance player = effector.getActingPlayer();
 		if ((player == null) || (player.getAirShip() == null) || !(player.getAirShip() instanceof L2ControllableAirShipInstance) || ((player.getAirShip().getFuel() + _val) > player.getAirShip().getMaxFuel()))
 		{
 			canRefuelAirship = false;

+ 22 - 23
L2J_Server/java/com/l2jserver/gameserver/model/conditions/ConditionPlayerCanResurrect.java

@@ -21,7 +21,8 @@ package com.l2jserver.gameserver.model.conditions;
 import com.l2jserver.gameserver.model.actor.L2Character;
 import com.l2jserver.gameserver.model.actor.L2Summon;
 import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;
-import com.l2jserver.gameserver.model.stats.Env;
+import com.l2jserver.gameserver.model.items.L2Item;
+import com.l2jserver.gameserver.model.skills.Skill;
 import com.l2jserver.gameserver.network.SystemMessageId;
 import com.l2jserver.gameserver.network.serverpackets.SystemMessage;
 
@@ -39,75 +40,73 @@ public class ConditionPlayerCanResurrect extends Condition
 	}
 	
 	@Override
-	public boolean testImpl(Env env)
+	public boolean testImpl(L2Character effector, L2Character effected, Skill skill, L2Item item)
 	{
 		// Need skill rework for fix that properly
-		if (env.getSkill().getAffectRange() > 0)
+		if (skill.getAffectRange() > 0)
 		{
 			return true;
 		}
 		boolean canResurrect = true;
-		final L2Character caster = env.getCharacter();
-		final L2Character target = env.getTarget();
 		
-		if (target.isPlayer())
+		if (effected.isPlayer())
 		{
-			final L2PcInstance player = target.getActingPlayer();
+			final L2PcInstance player = effected.getActingPlayer();
 			if (!player.isDead())
 			{
 				canResurrect = false;
-				if (caster.isPlayer())
+				if (effector.isPlayer())
 				{
 					final SystemMessage msg = SystemMessage.getSystemMessage(SystemMessageId.S1_CANNOT_BE_USED);
-					msg.addSkillName(env.getSkill());
-					caster.sendPacket(msg);
+					msg.addSkillName(skill);
+					effector.sendPacket(msg);
 				}
 			}
 			else if (player.isResurrectionBlocked())
 			{
 				canResurrect = false;
-				if (caster.isPlayer())
+				if (effector.isPlayer())
 				{
-					caster.sendPacket(SystemMessageId.REJECT_RESURRECTION);
+					effector.sendPacket(SystemMessageId.REJECT_RESURRECTION);
 				}
 			}
 			else if (player.isReviveRequested())
 			{
 				canResurrect = false;
-				if (caster.isPlayer())
+				if (effector.isPlayer())
 				{
-					caster.sendPacket(SystemMessageId.RES_HAS_ALREADY_BEEN_PROPOSED);
+					effector.sendPacket(SystemMessageId.RES_HAS_ALREADY_BEEN_PROPOSED);
 				}
 			}
 		}
-		else if (target.isSummon())
+		else if (effected.isSummon())
 		{
-			final L2Summon summon = (L2Summon) target;
+			final L2Summon summon = (L2Summon) effected;
 			final L2PcInstance player = summon.getOwner();
 			if (!summon.isDead())
 			{
 				canResurrect = false;
-				if (caster.isPlayer())
+				if (effector.isPlayer())
 				{
 					final SystemMessage msg = SystemMessage.getSystemMessage(SystemMessageId.S1_CANNOT_BE_USED);
-					msg.addSkillName(env.getSkill());
-					caster.sendPacket(msg);
+					msg.addSkillName(skill);
+					effector.sendPacket(msg);
 				}
 			}
 			else if (summon.isResurrectionBlocked())
 			{
 				canResurrect = false;
-				if (caster.isPlayer())
+				if (effector.isPlayer())
 				{
-					caster.sendPacket(SystemMessageId.REJECT_RESURRECTION);
+					effector.sendPacket(SystemMessageId.REJECT_RESURRECTION);
 				}
 			}
 			else if ((player != null) && player.isRevivingPet())
 			{
 				canResurrect = false;
-				if (caster.isPlayer())
+				if (effector.isPlayer())
 				{
-					caster.sendPacket(SystemMessageId.RES_HAS_ALREADY_BEEN_PROPOSED); // Resurrection is already been proposed.
+					effector.sendPacket(SystemMessageId.RES_HAS_ALREADY_BEEN_PROPOSED); // Resurrection is already been proposed.
 				}
 			}
 		}

+ 5 - 3
L2J_Server/java/com/l2jserver/gameserver/model/conditions/ConditionPlayerCanSummon.java

@@ -20,8 +20,10 @@ package com.l2jserver.gameserver.model.conditions;
 
 import com.l2jserver.Config;
 import com.l2jserver.gameserver.datatables.CharSummonTable;
+import com.l2jserver.gameserver.model.actor.L2Character;
 import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;
-import com.l2jserver.gameserver.model.stats.Env;
+import com.l2jserver.gameserver.model.items.L2Item;
+import com.l2jserver.gameserver.model.skills.Skill;
 import com.l2jserver.gameserver.network.SystemMessageId;
 
 /**
@@ -38,9 +40,9 @@ public class ConditionPlayerCanSummon extends Condition
 	}
 	
 	@Override
-	public boolean testImpl(Env env)
+	public boolean testImpl(L2Character effector, L2Character effected, Skill skill, L2Item item)
 	{
-		final L2PcInstance player = env.getPlayer();
+		final L2PcInstance player = effector.getActingPlayer();
 		if (player == null)
 		{
 			return false;

+ 14 - 7
L2J_Server/java/com/l2jserver/gameserver/model/conditions/ConditionPlayerCanSummonSiegeGolem.java

@@ -21,10 +21,12 @@ package com.l2jserver.gameserver.model.conditions;
 import com.l2jserver.gameserver.SevenSigns;
 import com.l2jserver.gameserver.instancemanager.CastleManager;
 import com.l2jserver.gameserver.instancemanager.FortManager;
+import com.l2jserver.gameserver.model.actor.L2Character;
 import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;
 import com.l2jserver.gameserver.model.entity.Castle;
 import com.l2jserver.gameserver.model.entity.Fort;
-import com.l2jserver.gameserver.model.stats.Env;
+import com.l2jserver.gameserver.model.items.L2Item;
+import com.l2jserver.gameserver.model.skills.Skill;
 import com.l2jserver.gameserver.network.SystemMessageId;
 
 /**
@@ -41,22 +43,27 @@ public class ConditionPlayerCanSummonSiegeGolem extends Condition
 	}
 	
 	@Override
-	public boolean testImpl(Env env)
+	public boolean testImpl(L2Character effector, L2Character effected, Skill skill, L2Item item)
 	{
+		if ((effector == null) || !effector.isPlayer())
+		{
+			return !_val;
+		}
+		
+		final L2PcInstance player = effector.getActingPlayer();
 		boolean canSummonSiegeGolem = true;
-		if ((env.getPlayer() == null) || env.getPlayer().isAlikeDead() || env.getPlayer().isCursedWeaponEquipped() || (env.getPlayer().getClan() == null))
+		if (player.isAlikeDead() || player.isCursedWeaponEquipped() || (player.getClan() == null))
 		{
 			canSummonSiegeGolem = false;
 		}
 		
-		final Castle castle = CastleManager.getInstance().getCastle(env.getPlayer());
-		final Fort fort = FortManager.getInstance().getFort(env.getPlayer());
+		final Castle castle = CastleManager.getInstance().getCastle(player);
+		final Fort fort = FortManager.getInstance().getFort(player);
 		if ((castle == null) && (fort == null))
 		{
 			canSummonSiegeGolem = false;
 		}
 		
-		L2PcInstance player = env.getPlayer().getActingPlayer();
 		if (((fort != null) && (fort.getResidenceId() == 0)) || ((castle != null) && (castle.getResidenceId() == 0)))
 		{
 			player.sendPacket(SystemMessageId.INCORRECT_TARGET);
@@ -72,7 +79,7 @@ public class ConditionPlayerCanSummonSiegeGolem extends Condition
 			player.sendPacket(SystemMessageId.INCORRECT_TARGET);
 			canSummonSiegeGolem = false;
 		}
-		else if ((SevenSigns.getInstance().checkSummonConditions(env.getPlayer())))
+		else if ((SevenSigns.getInstance().checkSummonConditions(player)))
 		{
 			canSummonSiegeGolem = false;
 		}

+ 7 - 7
L2J_Server/java/com/l2jserver/gameserver/model/conditions/ConditionPlayerCanSweep.java

@@ -21,9 +21,10 @@ package com.l2jserver.gameserver.model.conditions;
 import com.l2jserver.Config;
 import com.l2jserver.gameserver.model.L2Object;
 import com.l2jserver.gameserver.model.actor.L2Attackable;
+import com.l2jserver.gameserver.model.actor.L2Character;
 import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;
+import com.l2jserver.gameserver.model.items.L2Item;
 import com.l2jserver.gameserver.model.skills.Skill;
-import com.l2jserver.gameserver.model.stats.Env;
 import com.l2jserver.gameserver.network.SystemMessageId;
 
 /**
@@ -48,16 +49,15 @@ public class ConditionPlayerCanSweep extends Condition
 	}
 	
 	@Override
-	public boolean testImpl(Env env)
+	public boolean testImpl(L2Character effector, L2Character effected, Skill skill, L2Item item)
 	{
 		boolean canSweep = false;
-		if (env.getPlayer() != null)
+		if (effector.getActingPlayer() != null)
 		{
-			final L2PcInstance sweeper = env.getPlayer();
-			final Skill sweep = env.getSkill();
-			if (sweep != null)
+			final L2PcInstance sweeper = effector.getActingPlayer();
+			if (skill != null)
 			{
-				final L2Object[] targets = sweep.getTargetList(sweeper);
+				final L2Object[] targets = skill.getTargetList(sweeper);
 				if (targets != null)
 				{
 					L2Attackable target;

+ 19 - 14
L2J_Server/java/com/l2jserver/gameserver/model/conditions/ConditionPlayerCanTakeCastle.java

@@ -19,8 +19,11 @@
 package com.l2jserver.gameserver.model.conditions;
 
 import com.l2jserver.gameserver.instancemanager.CastleManager;
+import com.l2jserver.gameserver.model.actor.L2Character;
+import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;
 import com.l2jserver.gameserver.model.entity.Castle;
-import com.l2jserver.gameserver.model.stats.Env;
+import com.l2jserver.gameserver.model.items.L2Item;
+import com.l2jserver.gameserver.model.skills.Skill;
 import com.l2jserver.gameserver.network.SystemMessageId;
 import com.l2jserver.gameserver.network.serverpackets.SystemMessage;
 import com.l2jserver.gameserver.util.Util;
@@ -39,35 +42,37 @@ public class ConditionPlayerCanTakeCastle extends Condition
 	}
 	
 	@Override
-	public boolean testImpl(Env env)
+	public boolean testImpl(L2Character effector, L2Character effected, Skill skill, L2Item item)
 	{
-		boolean canTakeCastle = true;
-		if ((env.getPlayer() == null) || env.getPlayer().isAlikeDead() || env.getPlayer().isCursedWeaponEquipped())
+		if ((effector == null) || !effector.isPlayer())
 		{
-			canTakeCastle = false;
+			return !_val;
 		}
-		else if ((env.getPlayer().getClan() == null) || (env.getPlayer().getClan().getLeaderId() != env.getPlayer().getObjectId()))
+		
+		final L2PcInstance player = effector.getActingPlayer();
+		boolean canTakeCastle = true;
+		if (player.isAlikeDead() || player.isCursedWeaponEquipped() || !player.isClanLeader())
 		{
 			canTakeCastle = false;
 		}
 		
-		Castle castle = CastleManager.getInstance().getCastle(env.getPlayer());
+		Castle castle = CastleManager.getInstance().getCastle(player);
 		SystemMessage sm;
-		if ((castle == null) || (castle.getResidenceId() <= 0) || !castle.getSiege().isInProgress() || (castle.getSiege().getAttackerClan(env.getPlayer().getClan()) == null))
+		if ((castle == null) || (castle.getResidenceId() <= 0) || !castle.getSiege().isInProgress() || (castle.getSiege().getAttackerClan(player.getClan()) == null))
 		{
 			sm = SystemMessage.getSystemMessage(SystemMessageId.S1_CANNOT_BE_USED);
-			sm.addSkillName(env.getSkill());
-			env.getPlayer().sendPacket(sm);
+			sm.addSkillName(skill);
+			player.sendPacket(sm);
 			canTakeCastle = false;
 		}
-		else if (!castle.getArtefacts().contains(env.getTarget()))
+		else if (!castle.getArtefacts().contains(effected))
 		{
-			env.getPlayer().sendPacket(SystemMessageId.INCORRECT_TARGET);
+			player.sendPacket(SystemMessageId.INCORRECT_TARGET);
 			canTakeCastle = false;
 		}
-		else if (!Util.checkIfInRange(env.getSkill().getCastRange(), env.getPlayer(), env.getTarget(), true))
+		else if (!Util.checkIfInRange(skill.getCastRange(), player, effected, true))
 		{
-			env.getPlayer().sendPacket(SystemMessageId.DIST_TOO_FAR_CASTING_STOPPED);
+			player.sendPacket(SystemMessageId.DIST_TOO_FAR_CASTING_STOPPED);
 			canTakeCastle = false;
 		}
 		return (_val == canTakeCastle);

+ 20 - 11
L2J_Server/java/com/l2jserver/gameserver/model/conditions/ConditionPlayerCanTakeFort.java

@@ -19,8 +19,11 @@
 package com.l2jserver.gameserver.model.conditions;
 
 import com.l2jserver.gameserver.instancemanager.FortManager;
+import com.l2jserver.gameserver.model.actor.L2Character;
+import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;
 import com.l2jserver.gameserver.model.entity.Fort;
-import com.l2jserver.gameserver.model.stats.Env;
+import com.l2jserver.gameserver.model.items.L2Item;
+import com.l2jserver.gameserver.model.skills.Skill;
 import com.l2jserver.gameserver.network.SystemMessageId;
 import com.l2jserver.gameserver.network.serverpackets.SystemMessage;
 import com.l2jserver.gameserver.util.Util;
@@ -39,31 +42,37 @@ public class ConditionPlayerCanTakeFort extends Condition
 	}
 	
 	@Override
-	public boolean testImpl(Env env)
+	public boolean testImpl(L2Character effector, L2Character effected, Skill skill, L2Item item)
 	{
+		if ((effector == null) || !effector.isPlayer())
+		{
+			return !_val;
+		}
+		
+		final L2PcInstance player = effector.getActingPlayer();
 		boolean canTakeFort = true;
-		if ((env.getPlayer() == null) || env.getPlayer().isAlikeDead() || env.getPlayer().isCursedWeaponEquipped() || (env.getPlayer().getClan() == null))
+		if (player.isAlikeDead() || player.isCursedWeaponEquipped() || !player.isClanLeader())
 		{
 			canTakeFort = false;
 		}
 		
-		final Fort fort = FortManager.getInstance().getFort(env.getPlayer());
+		final Fort fort = FortManager.getInstance().getFort(player);
 		final SystemMessage sm;
-		if ((fort == null) || (fort.getResidenceId() <= 0) || !fort.getSiege().isInProgress() || (fort.getSiege().getAttackerClan(env.getPlayer().getClan()) == null))
+		if ((fort == null) || (fort.getResidenceId() <= 0) || !fort.getSiege().isInProgress() || (fort.getSiege().getAttackerClan(player.getClan()) == null))
 		{
 			sm = SystemMessage.getSystemMessage(SystemMessageId.S1_CANNOT_BE_USED);
-			sm.addSkillName(env.getSkill());
-			env.getPlayer().sendPacket(sm);
+			sm.addSkillName(skill);
+			player.sendPacket(sm);
 			canTakeFort = false;
 		}
-		else if (fort.getFlagPole() != env.getTarget())
+		else if (fort.getFlagPole() != effected)
 		{
-			env.getPlayer().sendPacket(SystemMessageId.INCORRECT_TARGET);
+			player.sendPacket(SystemMessageId.INCORRECT_TARGET);
 			canTakeFort = false;
 		}
-		else if (!Util.checkIfInRange(200, env.getPlayer(), env.getTarget(), true))
+		else if (!Util.checkIfInRange(200, player, effected, true))
 		{
-			env.getPlayer().sendPacket(SystemMessageId.DIST_TOO_FAR_CASTING_STOPPED);
+			player.sendPacket(SystemMessageId.DIST_TOO_FAR_CASTING_STOPPED);
 			canTakeFort = false;
 		}
 		return (_val == canTakeFort);

+ 5 - 3
L2J_Server/java/com/l2jserver/gameserver/model/conditions/ConditionPlayerCanTransform.java

@@ -18,8 +18,10 @@
  */
 package com.l2jserver.gameserver.model.conditions;
 
+import com.l2jserver.gameserver.model.actor.L2Character;
 import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;
-import com.l2jserver.gameserver.model.stats.Env;
+import com.l2jserver.gameserver.model.items.L2Item;
+import com.l2jserver.gameserver.model.skills.Skill;
 import com.l2jserver.gameserver.network.SystemMessageId;
 
 /**
@@ -36,10 +38,10 @@ public class ConditionPlayerCanTransform extends Condition
 	}
 	
 	@Override
-	public boolean testImpl(Env env)
+	public boolean testImpl(L2Character effector, L2Character effected, Skill skill, L2Item item)
 	{
 		boolean canTransform = true;
-		final L2PcInstance player = env.getPlayer();
+		final L2PcInstance player = effector.getActingPlayer();
 		if ((player == null) || player.isAlikeDead() || player.isCursedWeaponEquipped())
 		{
 			canTransform = false;

+ 5 - 3
L2J_Server/java/com/l2jserver/gameserver/model/conditions/ConditionPlayerCanUntransform.java

@@ -18,8 +18,10 @@
  */
 package com.l2jserver.gameserver.model.conditions;
 
+import com.l2jserver.gameserver.model.actor.L2Character;
 import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;
-import com.l2jserver.gameserver.model.stats.Env;
+import com.l2jserver.gameserver.model.items.L2Item;
+import com.l2jserver.gameserver.model.skills.Skill;
 import com.l2jserver.gameserver.model.zone.ZoneId;
 import com.l2jserver.gameserver.network.SystemMessageId;
 
@@ -37,10 +39,10 @@ public class ConditionPlayerCanUntransform extends Condition
 	}
 	
 	@Override
-	public boolean testImpl(Env env)
+	public boolean testImpl(L2Character effector, L2Character effected, Skill skill, L2Item item)
 	{
 		boolean canUntransform = true;
-		final L2PcInstance player = env.getPlayer();
+		final L2PcInstance player = effector.getActingPlayer();
 		if (player == null)
 		{
 			canUntransform = false;

+ 5 - 3
L2J_Server/java/com/l2jserver/gameserver/model/conditions/ConditionPlayerCharges.java

@@ -18,7 +18,9 @@
  */
 package com.l2jserver.gameserver.model.conditions;
 
-import com.l2jserver.gameserver.model.stats.Env;
+import com.l2jserver.gameserver.model.actor.L2Character;
+import com.l2jserver.gameserver.model.items.L2Item;
+import com.l2jserver.gameserver.model.skills.Skill;
 
 /**
  * The Class ConditionPlayerCharges.
@@ -37,8 +39,8 @@ public class ConditionPlayerCharges extends Condition
 	}
 	
 	@Override
-	public boolean testImpl(Env env)
+	public boolean testImpl(L2Character effector, L2Character effected, Skill skill, L2Item item)
 	{
-		return (env.getPlayer() != null) && (env.getPlayer().getCharges() >= _charges);
+		return (effector.getActingPlayer() != null) && (effector.getActingPlayer().getCharges() >= _charges);
 	}
 }

+ 5 - 3
L2J_Server/java/com/l2jserver/gameserver/model/conditions/ConditionPlayerCheckAbnormal.java

@@ -18,9 +18,11 @@
  */
 package com.l2jserver.gameserver.model.conditions;
 
+import com.l2jserver.gameserver.model.actor.L2Character;
+import com.l2jserver.gameserver.model.items.L2Item;
 import com.l2jserver.gameserver.model.skills.AbnormalType;
 import com.l2jserver.gameserver.model.skills.BuffInfo;
-import com.l2jserver.gameserver.model.stats.Env;
+import com.l2jserver.gameserver.model.skills.Skill;
 
 /**
  * Condition implementation to verify player's abnormal type and level.
@@ -53,9 +55,9 @@ public class ConditionPlayerCheckAbnormal extends Condition
 	}
 	
 	@Override
-	public boolean testImpl(Env env)
+	public boolean testImpl(L2Character effector, L2Character effected, Skill skill, L2Item item)
 	{
-		final BuffInfo info = env.getCharacter().getEffectList().getBuffInfoByAbnormalType(_type);
+		final BuffInfo info = effector.getEffectList().getBuffInfoByAbnormalType(_type);
 		return ((info != null) && ((_level == -1) || (_level >= info.getSkill().getAbnormalLvl())));
 	}
 }

+ 5 - 3
L2J_Server/java/com/l2jserver/gameserver/model/conditions/ConditionPlayerClassIdRestriction.java

@@ -20,7 +20,9 @@ package com.l2jserver.gameserver.model.conditions;
 
 import java.util.List;
 
-import com.l2jserver.gameserver.model.stats.Env;
+import com.l2jserver.gameserver.model.actor.L2Character;
+import com.l2jserver.gameserver.model.items.L2Item;
+import com.l2jserver.gameserver.model.skills.Skill;
 
 /**
  * The Class ConditionPlayerClassIdRestriction.
@@ -39,8 +41,8 @@ public class ConditionPlayerClassIdRestriction extends Condition
 	}
 	
 	@Override
-	public boolean testImpl(Env env)
+	public boolean testImpl(L2Character effector, L2Character effected, Skill skill, L2Item item)
 	{
-		return (env.getPlayer() != null) && (_classIds.contains(env.getPlayer().getClassId().getId()));
+		return (effector.getActingPlayer() != null) && (_classIds.contains(effector.getActingPlayer().getClassId().getId()));
 	}
 }

+ 5 - 3
L2J_Server/java/com/l2jserver/gameserver/model/conditions/ConditionPlayerCloakStatus.java

@@ -18,7 +18,9 @@
  */
 package com.l2jserver.gameserver.model.conditions;
 
-import com.l2jserver.gameserver.model.stats.Env;
+import com.l2jserver.gameserver.model.actor.L2Character;
+import com.l2jserver.gameserver.model.items.L2Item;
+import com.l2jserver.gameserver.model.skills.Skill;
 
 /**
  * The Class ConditionPlayerCloakStatus.
@@ -37,8 +39,8 @@ public class ConditionPlayerCloakStatus extends Condition
 	}
 	
 	@Override
-	public boolean testImpl(Env env)
+	public boolean testImpl(L2Character effector, L2Character effected, Skill skill, L2Item item)
 	{
-		return (env.getPlayer() != null) && (env.getPlayer().getInventory().canEquipCloak() == _val);
+		return (effector.getActingPlayer() != null) && (effector.getActingPlayer().getInventory().canEquipCloak() == _val);
 	}
 }

+ 5 - 3
L2J_Server/java/com/l2jserver/gameserver/model/conditions/ConditionPlayerCp.java

@@ -18,7 +18,9 @@
  */
 package com.l2jserver.gameserver.model.conditions;
 
-import com.l2jserver.gameserver.model.stats.Env;
+import com.l2jserver.gameserver.model.actor.L2Character;
+import com.l2jserver.gameserver.model.items.L2Item;
+import com.l2jserver.gameserver.model.skills.Skill;
 
 /**
  * The Class ConditionPlayerCp.
@@ -38,8 +40,8 @@ public class ConditionPlayerCp extends Condition
 	}
 	
 	@Override
-	public boolean testImpl(Env env)
+	public boolean testImpl(L2Character effector, L2Character effected, Skill skill, L2Item item)
 	{
-		return (env.getCharacter() != null) && (((env.getCharacter().getCurrentCp() * 100) / env.getCharacter().getMaxCp()) >= _cp);
+		return (effector != null) && (((effector.getCurrentCp() * 100) / effector.getMaxCp()) >= _cp);
 	}
 }

+ 5 - 3
L2J_Server/java/com/l2jserver/gameserver/model/conditions/ConditionPlayerFlyMounted.java

@@ -18,7 +18,9 @@
  */
 package com.l2jserver.gameserver.model.conditions;
 
-import com.l2jserver.gameserver.model.stats.Env;
+import com.l2jserver.gameserver.model.actor.L2Character;
+import com.l2jserver.gameserver.model.items.L2Item;
+import com.l2jserver.gameserver.model.skills.Skill;
 
 /**
  * The Class ConditionPlayerFlyMounted.
@@ -38,8 +40,8 @@ public class ConditionPlayerFlyMounted extends Condition
 	}
 	
 	@Override
-	public boolean testImpl(Env env)
+	public boolean testImpl(L2Character effector, L2Character effected, Skill skill, L2Item item)
 	{
-		return (env.getPlayer() != null) ? env.getPlayer().isFlyingMounted() == _val : true;
+		return (effector.getActingPlayer() != null) ? effector.getActingPlayer().isFlyingMounted() == _val : true;
 	}
 }

+ 5 - 3
L2J_Server/java/com/l2jserver/gameserver/model/conditions/ConditionPlayerGrade.java

@@ -20,7 +20,9 @@ package com.l2jserver.gameserver.model.conditions;
 
 import java.util.logging.Logger;
 
-import com.l2jserver.gameserver.model.stats.Env;
+import com.l2jserver.gameserver.model.actor.L2Character;
+import com.l2jserver.gameserver.model.items.L2Item;
+import com.l2jserver.gameserver.model.skills.Skill;
 
 /**
  * The Class ConditionPlayerGrade.
@@ -54,8 +56,8 @@ public final class ConditionPlayerGrade extends Condition
 	 * 
 	 */
 	@Override
-	public boolean testImpl(Env env)
+	public boolean testImpl(L2Character effector, L2Character effected, Skill skill, L2Item item)
 	{
-		return (env.getPlayer() != null) && (_value == (byte) env.getPlayer().getExpertiseLevel());
+		return (effector.getActingPlayer() != null) && (_value == (byte) effector.getActingPlayer().getExpertiseLevel());
 	}
 }

+ 6 - 5
L2J_Server/java/com/l2jserver/gameserver/model/conditions/ConditionPlayerHasCastle.java

@@ -19,7 +19,9 @@
 package com.l2jserver.gameserver.model.conditions;
 
 import com.l2jserver.gameserver.model.L2Clan;
-import com.l2jserver.gameserver.model.stats.Env;
+import com.l2jserver.gameserver.model.actor.L2Character;
+import com.l2jserver.gameserver.model.items.L2Item;
+import com.l2jserver.gameserver.model.skills.Skill;
 
 /**
  * The Class ConditionPlayerHasCastle.
@@ -41,18 +43,17 @@ public final class ConditionPlayerHasCastle extends Condition
 	
 	/**
 	 * Test impl.
-	 * @param env the env
 	 * @return true, if successful
 	 */
 	@Override
-	public boolean testImpl(Env env)
+	public boolean testImpl(L2Character effector, L2Character effected, Skill skill, L2Item item)
 	{
-		if (env.getPlayer() == null)
+		if (effector.getActingPlayer() == null)
 		{
 			return false;
 		}
 		
-		final L2Clan clan = env.getPlayer().getClan();
+		final L2Clan clan = effector.getActingPlayer().getClan();
 		if (clan == null)
 		{
 			return _castle == 0;

+ 6 - 5
L2J_Server/java/com/l2jserver/gameserver/model/conditions/ConditionPlayerHasClanHall.java

@@ -21,7 +21,9 @@ package com.l2jserver.gameserver.model.conditions;
 import java.util.ArrayList;
 
 import com.l2jserver.gameserver.model.L2Clan;
-import com.l2jserver.gameserver.model.stats.Env;
+import com.l2jserver.gameserver.model.actor.L2Character;
+import com.l2jserver.gameserver.model.items.L2Item;
+import com.l2jserver.gameserver.model.skills.Skill;
 
 /**
  * The Class ConditionPlayerHasClanHall.
@@ -42,18 +44,17 @@ public final class ConditionPlayerHasClanHall extends Condition
 	
 	/**
 	 * Test impl.
-	 * @param env the env
 	 * @return true, if successful
 	 */
 	@Override
-	public boolean testImpl(Env env)
+	public boolean testImpl(L2Character effector, L2Character effected, Skill skill, L2Item item)
 	{
-		if (env.getPlayer() == null)
+		if (effector.getActingPlayer() == null)
 		{
 			return false;
 		}
 		
-		final L2Clan clan = env.getPlayer().getClan();
+		final L2Clan clan = effector.getActingPlayer().getClan();
 		if (clan == null)
 		{
 			return ((_clanHall.size() == 1) && (_clanHall.get(0) == 0));

+ 6 - 5
L2J_Server/java/com/l2jserver/gameserver/model/conditions/ConditionPlayerHasFort.java

@@ -19,7 +19,9 @@
 package com.l2jserver.gameserver.model.conditions;
 
 import com.l2jserver.gameserver.model.L2Clan;
-import com.l2jserver.gameserver.model.stats.Env;
+import com.l2jserver.gameserver.model.actor.L2Character;
+import com.l2jserver.gameserver.model.items.L2Item;
+import com.l2jserver.gameserver.model.skills.Skill;
 
 /**
  * The Class ConditionPlayerHasFort.
@@ -40,18 +42,17 @@ public final class ConditionPlayerHasFort extends Condition
 	
 	/**
 	 * Test impl.
-	 * @param env the env
 	 * @return true, if successful
 	 */
 	@Override
-	public boolean testImpl(Env env)
+	public boolean testImpl(L2Character effector, L2Character effected, Skill skill, L2Item item)
 	{
-		if (env.getPlayer() == null)
+		if (effector.getActingPlayer() == null)
 		{
 			return false;
 		}
 		
-		final L2Clan clan = env.getPlayer().getClan();
+		final L2Clan clan = effector.getActingPlayer().getClan();
 		if (clan == null)
 		{
 			return _fort == 0;

+ 6 - 4
L2J_Server/java/com/l2jserver/gameserver/model/conditions/ConditionPlayerHasPet.java

@@ -20,9 +20,11 @@ package com.l2jserver.gameserver.model.conditions;
 
 import java.util.ArrayList;
 
+import com.l2jserver.gameserver.model.actor.L2Character;
 import com.l2jserver.gameserver.model.actor.instance.L2PetInstance;
+import com.l2jserver.gameserver.model.items.L2Item;
 import com.l2jserver.gameserver.model.items.instance.L2ItemInstance;
-import com.l2jserver.gameserver.model.stats.Env;
+import com.l2jserver.gameserver.model.skills.Skill;
 
 /**
  * The Class ConditionPlayerHasPet.
@@ -48,9 +50,9 @@ public class ConditionPlayerHasPet extends Condition
 	}
 	
 	@Override
-	public boolean testImpl(Env env)
+	public boolean testImpl(L2Character effector, L2Character effected, Skill skill, L2Item item)
 	{
-		if ((env.getPlayer() == null) || (!(env.getPlayer().getSummon() instanceof L2PetInstance)))
+		if ((effector.getActingPlayer() == null) || (!(effector.getActingPlayer().getSummon() instanceof L2PetInstance)))
 		{
 			return false;
 		}
@@ -60,7 +62,7 @@ public class ConditionPlayerHasPet extends Condition
 			return true;
 		}
 		
-		final L2ItemInstance controlItem = ((L2PetInstance) env.getPlayer().getSummon()).getControlItem();
+		final L2ItemInstance controlItem = ((L2PetInstance) effector.getActingPlayer().getSummon()).getControlItem();
 		return (controlItem != null) && _controlItemIds.contains(controlItem.getId());
 	}
 }

+ 5 - 3
L2J_Server/java/com/l2jserver/gameserver/model/conditions/ConditionPlayerHp.java

@@ -18,7 +18,9 @@
  */
 package com.l2jserver.gameserver.model.conditions;
 
-import com.l2jserver.gameserver.model.stats.Env;
+import com.l2jserver.gameserver.model.actor.L2Character;
+import com.l2jserver.gameserver.model.items.L2Item;
+import com.l2jserver.gameserver.model.skills.Skill;
 
 /**
  * The Class ConditionPlayerHp.
@@ -38,8 +40,8 @@ public class ConditionPlayerHp extends Condition
 	}
 	
 	@Override
-	public boolean testImpl(Env env)
+	public boolean testImpl(L2Character effector, L2Character effected, Skill skill, L2Item item)
 	{
-		return (env.getCharacter() != null) && (((env.getCharacter().getCurrentHp() * 100) / env.getCharacter().getMaxHp()) <= _hp);
+		return (effector != null) && (((effector.getCurrentHp() * 100) / effector.getMaxHp()) <= _hp);
 	}
 }

+ 9 - 7
L2J_Server/java/com/l2jserver/gameserver/model/conditions/ConditionPlayerInsideZoneId.java

@@ -18,10 +18,12 @@
  */
 package com.l2jserver.gameserver.model.conditions;
 
-import java.util.ArrayList;
+import java.util.List;
 
 import com.l2jserver.gameserver.instancemanager.ZoneManager;
-import com.l2jserver.gameserver.model.stats.Env;
+import com.l2jserver.gameserver.model.actor.L2Character;
+import com.l2jserver.gameserver.model.items.L2Item;
+import com.l2jserver.gameserver.model.skills.Skill;
 import com.l2jserver.gameserver.model.zone.L2ZoneType;
 
 /**
@@ -29,22 +31,22 @@ import com.l2jserver.gameserver.model.zone.L2ZoneType;
  */
 public class ConditionPlayerInsideZoneId extends Condition
 {
-	private final ArrayList<Integer> _zones;
+	private final List<Integer> _zones;
 	
-	public ConditionPlayerInsideZoneId(ArrayList<Integer> zones)
+	public ConditionPlayerInsideZoneId(List<Integer> zones)
 	{
 		_zones = zones;
 	}
 	
 	@Override
-	public boolean testImpl(Env env)
+	public boolean testImpl(L2Character effector, L2Character effected, Skill skill, L2Item item)
 	{
-		if (env.getPlayer() == null)
+		if (effector.getActingPlayer() == null)
 		{
 			return false;
 		}
 		
-		for (L2ZoneType zone : ZoneManager.getInstance().getZones(env.getCharacter()))
+		for (L2ZoneType zone : ZoneManager.getInstance().getZones(effector))
 		{
 			if (_zones.contains(zone.getId()))
 			{

+ 7 - 5
L2J_Server/java/com/l2jserver/gameserver/model/conditions/ConditionPlayerInstanceId.java

@@ -21,8 +21,10 @@ package com.l2jserver.gameserver.model.conditions;
 import java.util.ArrayList;
 
 import com.l2jserver.gameserver.instancemanager.InstanceManager;
+import com.l2jserver.gameserver.model.actor.L2Character;
 import com.l2jserver.gameserver.model.instancezone.InstanceWorld;
-import com.l2jserver.gameserver.model.stats.Env;
+import com.l2jserver.gameserver.model.items.L2Item;
+import com.l2jserver.gameserver.model.skills.Skill;
 
 /**
  * The Class ConditionPlayerInstanceId.
@@ -41,20 +43,20 @@ public class ConditionPlayerInstanceId extends Condition
 	}
 	
 	@Override
-	public boolean testImpl(Env env)
+	public boolean testImpl(L2Character effector, L2Character effected, Skill skill, L2Item item)
 	{
-		if (env.getPlayer() == null)
+		if (effector.getActingPlayer() == null)
 		{
 			return false;
 		}
 		
-		final int instanceId = env.getCharacter().getInstanceId();
+		final int instanceId = effector.getInstanceId();
 		if (instanceId <= 0)
 		{
 			return false; // player not in instance
 		}
 		
-		final InstanceWorld world = InstanceManager.getInstance().getPlayerWorld(env.getPlayer());
+		final InstanceWorld world = InstanceManager.getInstance().getPlayerWorld(effector.getActingPlayer());
 		if ((world == null) || (world.getInstanceId() != instanceId))
 		{
 			return false; // player in the different instance

+ 6 - 4
L2J_Server/java/com/l2jserver/gameserver/model/conditions/ConditionPlayerInvSize.java

@@ -18,7 +18,9 @@
  */
 package com.l2jserver.gameserver.model.conditions;
 
-import com.l2jserver.gameserver.model.stats.Env;
+import com.l2jserver.gameserver.model.actor.L2Character;
+import com.l2jserver.gameserver.model.items.L2Item;
+import com.l2jserver.gameserver.model.skills.Skill;
 
 /**
  * The Class ConditionPlayerInvSize.
@@ -39,11 +41,11 @@ public class ConditionPlayerInvSize extends Condition
 	}
 	
 	@Override
-	public boolean testImpl(Env env)
+	public boolean testImpl(L2Character effector, L2Character effected, Skill skill, L2Item item)
 	{
-		if (env.getPlayer() != null)
+		if (effector.getActingPlayer() != null)
 		{
-			return env.getPlayer().getInventory().getSize(false) <= (env.getPlayer().getInventoryLimit() - _size);
+			return effector.getActingPlayer().getInventory().getSize(false) <= (effector.getActingPlayer().getInventoryLimit() - _size);
 		}
 		return true;
 	}

+ 6 - 4
L2J_Server/java/com/l2jserver/gameserver/model/conditions/ConditionPlayerIsClanLeader.java

@@ -18,7 +18,9 @@
  */
 package com.l2jserver.gameserver.model.conditions;
 
-import com.l2jserver.gameserver.model.stats.Env;
+import com.l2jserver.gameserver.model.actor.L2Character;
+import com.l2jserver.gameserver.model.items.L2Item;
+import com.l2jserver.gameserver.model.skills.Skill;
 
 /**
  * The Class ConditionPlayerIsClanLeader.
@@ -37,12 +39,12 @@ public class ConditionPlayerIsClanLeader extends Condition
 	}
 	
 	@Override
-	public boolean testImpl(Env env)
+	public boolean testImpl(L2Character effector, L2Character effected, Skill skill, L2Item item)
 	{
-		if (env.getPlayer() == null)
+		if (effector.getActingPlayer() == null)
 		{
 			return false;
 		}
-		return (env.getPlayer().isClanLeader() == _val);
+		return (effector.getActingPlayer().isClanLeader() == _val);
 	}
 }

+ 6 - 4
L2J_Server/java/com/l2jserver/gameserver/model/conditions/ConditionPlayerIsHero.java

@@ -18,7 +18,9 @@
  */
 package com.l2jserver.gameserver.model.conditions;
 
-import com.l2jserver.gameserver.model.stats.Env;
+import com.l2jserver.gameserver.model.actor.L2Character;
+import com.l2jserver.gameserver.model.items.L2Item;
+import com.l2jserver.gameserver.model.skills.Skill;
 
 /**
  * The Class ConditionPlayerIsHero.
@@ -37,12 +39,12 @@ public class ConditionPlayerIsHero extends Condition
 	}
 	
 	@Override
-	public boolean testImpl(Env env)
+	public boolean testImpl(L2Character effector, L2Character effected, Skill skill, L2Item item)
 	{
-		if (env.getPlayer() == null)
+		if (effector.getActingPlayer() == null)
 		{
 			return false;
 		}
-		return (env.getPlayer().isHero() == _val);
+		return (effector.getActingPlayer().isHero() == _val);
 	}
 }

+ 5 - 3
L2J_Server/java/com/l2jserver/gameserver/model/conditions/ConditionPlayerLandingZone.java

@@ -18,7 +18,9 @@
  */
 package com.l2jserver.gameserver.model.conditions;
 
-import com.l2jserver.gameserver.model.stats.Env;
+import com.l2jserver.gameserver.model.actor.L2Character;
+import com.l2jserver.gameserver.model.items.L2Item;
+import com.l2jserver.gameserver.model.skills.Skill;
 import com.l2jserver.gameserver.model.zone.ZoneId;
 
 /**
@@ -40,8 +42,8 @@ public class ConditionPlayerLandingZone extends Condition
 	}
 	
 	@Override
-	public boolean testImpl(Env env)
+	public boolean testImpl(L2Character effector, L2Character effected, Skill skill, L2Item item)
 	{
-		return env.getCharacter().isInsideZone(ZoneId.LANDING) == _val;
+		return effector.isInsideZone(ZoneId.LANDING) == _val;
 	}
 }

+ 5 - 3
L2J_Server/java/com/l2jserver/gameserver/model/conditions/ConditionPlayerLevel.java

@@ -18,7 +18,9 @@
  */
 package com.l2jserver.gameserver.model.conditions;
 
-import com.l2jserver.gameserver.model.stats.Env;
+import com.l2jserver.gameserver.model.actor.L2Character;
+import com.l2jserver.gameserver.model.items.L2Item;
+import com.l2jserver.gameserver.model.skills.Skill;
 
 /**
  * The Class ConditionPlayerLevel.
@@ -38,8 +40,8 @@ public class ConditionPlayerLevel extends Condition
 	}
 	
 	@Override
-	public boolean testImpl(Env env)
+	public boolean testImpl(L2Character effector, L2Character effected, Skill skill, L2Item item)
 	{
-		return env.getCharacter().getLevel() >= _level;
+		return effector.getLevel() >= _level;
 	}
 }

+ 5 - 3
L2J_Server/java/com/l2jserver/gameserver/model/conditions/ConditionPlayerLevelRange.java

@@ -18,7 +18,9 @@
  */
 package com.l2jserver.gameserver.model.conditions;
 
-import com.l2jserver.gameserver.model.stats.Env;
+import com.l2jserver.gameserver.model.actor.L2Character;
+import com.l2jserver.gameserver.model.items.L2Item;
+import com.l2jserver.gameserver.model.skills.Skill;
 
 /**
  * @author Zoey76
@@ -37,9 +39,9 @@ public class ConditionPlayerLevelRange extends Condition
 	}
 	
 	@Override
-	public boolean testImpl(Env env)
+	public boolean testImpl(L2Character effector, L2Character effected, Skill skill, L2Item item)
 	{
-		final int level = env.getCharacter().getLevel();
+		final int level = effector.getLevel();
 		return ((level >= _levels[0]) && (level <= _levels[1]));
 	}
 }

+ 5 - 3
L2J_Server/java/com/l2jserver/gameserver/model/conditions/ConditionPlayerMp.java

@@ -18,7 +18,9 @@
  */
 package com.l2jserver.gameserver.model.conditions;
 
-import com.l2jserver.gameserver.model.stats.Env;
+import com.l2jserver.gameserver.model.actor.L2Character;
+import com.l2jserver.gameserver.model.items.L2Item;
+import com.l2jserver.gameserver.model.skills.Skill;
 
 /**
  * The Class ConditionPlayerMp.
@@ -38,8 +40,8 @@ public class ConditionPlayerMp extends Condition
 	}
 	
 	@Override
-	public boolean testImpl(Env env)
+	public boolean testImpl(L2Character effector, L2Character effected, Skill skill, L2Item item)
 	{
-		return ((env.getCharacter().getCurrentMp() * 100) / env.getCharacter().getMaxMp()) <= _mp;
+		return ((effector.getCurrentMp() * 100) / effector.getMaxMp()) <= _mp;
 	}
 }

+ 6 - 4
L2J_Server/java/com/l2jserver/gameserver/model/conditions/ConditionPlayerPkCount.java

@@ -18,7 +18,9 @@
  */
 package com.l2jserver.gameserver.model.conditions;
 
-import com.l2jserver.gameserver.model.stats.Env;
+import com.l2jserver.gameserver.model.actor.L2Character;
+import com.l2jserver.gameserver.model.items.L2Item;
+import com.l2jserver.gameserver.model.skills.Skill;
 
 /**
  * The Class ConditionPlayerPkCount.
@@ -37,12 +39,12 @@ public class ConditionPlayerPkCount extends Condition
 	}
 	
 	@Override
-	public boolean testImpl(Env env)
+	public boolean testImpl(L2Character effector, L2Character effected, Skill skill, L2Item item)
 	{
-		if (env.getPlayer() == null)
+		if (effector.getActingPlayer() == null)
 		{
 			return false;
 		}
-		return env.getPlayer().getPkKills() <= _pk;
+		return effector.getActingPlayer().getPkKills() <= _pk;
 	}
 }

+ 6 - 5
L2J_Server/java/com/l2jserver/gameserver/model/conditions/ConditionPlayerPledgeClass.java

@@ -18,7 +18,9 @@
  */
 package com.l2jserver.gameserver.model.conditions;
 
-import com.l2jserver.gameserver.model.stats.Env;
+import com.l2jserver.gameserver.model.actor.L2Character;
+import com.l2jserver.gameserver.model.items.L2Item;
+import com.l2jserver.gameserver.model.skills.Skill;
 
 /**
  * The Class ConditionPlayerPledgeClass.
@@ -40,16 +42,15 @@ public final class ConditionPlayerPledgeClass extends Condition
 	
 	/**
 	 * Test impl.
-	 * @param env the env
 	 * @return true, if successful
 	 */
 	@Override
-	public boolean testImpl(Env env)
+	public boolean testImpl(L2Character effector, L2Character effected, Skill skill, L2Item item)
 	{
-		if ((env.getPlayer() == null) || (env.getPlayer().getClan() == null))
+		if ((effector.getActingPlayer() == null) || (effector.getActingPlayer().getClan() == null))
 		{
 			return false;
 		}
-		return (_pledgeClass == -1) ? env.getPlayer().isClanLeader() : (env.getPlayer().getPledgeClass() >= _pledgeClass);
+		return (_pledgeClass == -1) ? effector.getActingPlayer().isClanLeader() : (effector.getActingPlayer().getPledgeClass() >= _pledgeClass);
 	}
 }

+ 6 - 4
L2J_Server/java/com/l2jserver/gameserver/model/conditions/ConditionPlayerRace.java

@@ -19,7 +19,9 @@
 package com.l2jserver.gameserver.model.conditions;
 
 import com.l2jserver.gameserver.enums.Race;
-import com.l2jserver.gameserver.model.stats.Env;
+import com.l2jserver.gameserver.model.actor.L2Character;
+import com.l2jserver.gameserver.model.items.L2Item;
+import com.l2jserver.gameserver.model.skills.Skill;
 import com.l2jserver.gameserver.util.Util;
 
 /**
@@ -40,12 +42,12 @@ public class ConditionPlayerRace extends Condition
 	}
 	
 	@Override
-	public boolean testImpl(Env env)
+	public boolean testImpl(L2Character effector, L2Character effected, Skill skill, L2Item item)
 	{
-		if ((env.getCharacter() == null) || !env.getCharacter().isPlayer())
+		if ((effector == null) || !effector.isPlayer())
 		{
 			return false;
 		}
-		return Util.contains(_races, env.getPlayer().getRace());
+		return Util.contains(_races, effector.getActingPlayer().getRace());
 	}
 }

+ 4 - 3
L2J_Server/java/com/l2jserver/gameserver/model/conditions/ConditionPlayerRangeFromNpc.java

@@ -19,7 +19,8 @@
 package com.l2jserver.gameserver.model.conditions;
 
 import com.l2jserver.gameserver.model.actor.L2Character;
-import com.l2jserver.gameserver.model.stats.Env;
+import com.l2jserver.gameserver.model.items.L2Item;
+import com.l2jserver.gameserver.model.skills.Skill;
 import com.l2jserver.gameserver.util.Util;
 
 /**
@@ -43,12 +44,12 @@ public class ConditionPlayerRangeFromNpc extends Condition
 	}
 	
 	@Override
-	public boolean testImpl(Env env)
+	public boolean testImpl(L2Character effector, L2Character effected, Skill skill, L2Item item)
 	{
 		boolean existNpc = false;
 		if ((_npcIds != null) && (_npcIds.length > 0) && (_radius > 0))
 		{
-			for (L2Character target : env.getCharacter().getKnownList().getKnownCharactersInRadius(_radius))
+			for (L2Character target : effector.getKnownList().getKnownCharactersInRadius(_radius))
 			{
 				if (target.isNpc() && Util.contains(_npcIds, target.getId()))
 				{

+ 6 - 4
L2J_Server/java/com/l2jserver/gameserver/model/conditions/ConditionPlayerServitorNpcId.java

@@ -20,7 +20,9 @@ package com.l2jserver.gameserver.model.conditions;
 
 import java.util.List;
 
-import com.l2jserver.gameserver.model.stats.Env;
+import com.l2jserver.gameserver.model.actor.L2Character;
+import com.l2jserver.gameserver.model.items.L2Item;
+import com.l2jserver.gameserver.model.skills.Skill;
 
 /**
  * The Class ConditionPlayerServitorNpcId.
@@ -46,12 +48,12 @@ public class ConditionPlayerServitorNpcId extends Condition
 	}
 	
 	@Override
-	public boolean testImpl(Env env)
+	public boolean testImpl(L2Character effector, L2Character effected, Skill skill, L2Item item)
 	{
-		if ((env.getPlayer() == null) || !env.getPlayer().hasSummon())
+		if ((effector.getActingPlayer() == null) || !effector.getActingPlayer().hasSummon())
 		{
 			return false;
 		}
-		return (_npcIds == null) || _npcIds.contains(env.getPlayer().getSummon().getId());
+		return (_npcIds == null) || _npcIds.contains(effector.getActingPlayer().getSummon().getId());
 	}
 }

+ 6 - 4
L2J_Server/java/com/l2jserver/gameserver/model/conditions/ConditionPlayerSex.java

@@ -18,7 +18,9 @@
  */
 package com.l2jserver.gameserver.model.conditions;
 
-import com.l2jserver.gameserver.model.stats.Env;
+import com.l2jserver.gameserver.model.actor.L2Character;
+import com.l2jserver.gameserver.model.items.L2Item;
+import com.l2jserver.gameserver.model.skills.Skill;
 
 /**
  * The Class ConditionPlayerSex.
@@ -38,12 +40,12 @@ public class ConditionPlayerSex extends Condition
 	}
 	
 	@Override
-	public boolean testImpl(Env env)
+	public boolean testImpl(L2Character effector, L2Character effected, Skill skill, L2Item item)
 	{
-		if (env.getPlayer() == null)
+		if (effector.getActingPlayer() == null)
 		{
 			return false;
 		}
-		return (env.getPlayer().getAppearance().getSex() ? 1 : 0) == _sex;
+		return (effector.getActingPlayer().getAppearance().getSex() ? 1 : 0) == _sex;
 	}
 }

+ 6 - 4
L2J_Server/java/com/l2jserver/gameserver/model/conditions/ConditionPlayerSiegeSide.java

@@ -18,7 +18,9 @@
  */
 package com.l2jserver.gameserver.model.conditions;
 
-import com.l2jserver.gameserver.model.stats.Env;
+import com.l2jserver.gameserver.model.actor.L2Character;
+import com.l2jserver.gameserver.model.items.L2Item;
+import com.l2jserver.gameserver.model.skills.Skill;
 
 /**
  * The Class ConditionPlayerSiegeSide.
@@ -37,12 +39,12 @@ public class ConditionPlayerSiegeSide extends Condition
 	}
 	
 	@Override
-	public boolean testImpl(Env env)
+	public boolean testImpl(L2Character effector, L2Character effected, Skill skill, L2Item item)
 	{
-		if (env.getPlayer() == null)
+		if (effector.getActingPlayer() == null)
 		{
 			return false;
 		}
-		return env.getPlayer().getSiegeSide() == _siegeSide;
+		return effector.getActingPlayer().getSiegeSide() == _siegeSide;
 	}
 }

+ 5 - 3
L2J_Server/java/com/l2jserver/gameserver/model/conditions/ConditionPlayerSouls.java

@@ -18,7 +18,9 @@
  */
 package com.l2jserver.gameserver.model.conditions;
 
-import com.l2jserver.gameserver.model.stats.Env;
+import com.l2jserver.gameserver.model.actor.L2Character;
+import com.l2jserver.gameserver.model.items.L2Item;
+import com.l2jserver.gameserver.model.skills.Skill;
 
 /**
  * The Class ConditionPlayerSouls.
@@ -37,8 +39,8 @@ public class ConditionPlayerSouls extends Condition
 	}
 	
 	@Override
-	public boolean testImpl(Env env)
+	public boolean testImpl(L2Character effector, L2Character effected, Skill skill, L2Item item)
 	{
-		return (env.getPlayer() != null) && (env.getPlayer().getChargedSouls() >= _souls);
+		return (effector.getActingPlayer() != null) && (effector.getActingPlayer().getChargedSouls() >= _souls);
 	}
 }

+ 5 - 7
L2J_Server/java/com/l2jserver/gameserver/model/conditions/ConditionPlayerState.java

@@ -21,7 +21,8 @@ package com.l2jserver.gameserver.model.conditions;
 import com.l2jserver.gameserver.model.actor.L2Character;
 import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;
 import com.l2jserver.gameserver.model.base.PlayerState;
-import com.l2jserver.gameserver.model.stats.Env;
+import com.l2jserver.gameserver.model.items.L2Item;
+import com.l2jserver.gameserver.model.skills.Skill;
 
 /**
  * The Class ConditionPlayerState.
@@ -43,14 +44,11 @@ public class ConditionPlayerState extends Condition
 		_required = required;
 	}
 	
-	/**
-	 * 
-	 */
 	@Override
-	public boolean testImpl(Env env)
+	public boolean testImpl(L2Character effector, L2Character effected, Skill skill, L2Item item)
 	{
-		final L2Character character = env.getCharacter();
-		final L2PcInstance player = env.getPlayer();
+		final L2Character character = effector;
+		final L2PcInstance player = effector.getActingPlayer();
 		switch (_check)
 		{
 			case RESTING:

+ 6 - 4
L2J_Server/java/com/l2jserver/gameserver/model/conditions/ConditionPlayerSubclass.java

@@ -18,7 +18,9 @@
  */
 package com.l2jserver.gameserver.model.conditions;
 
-import com.l2jserver.gameserver.model.stats.Env;
+import com.l2jserver.gameserver.model.actor.L2Character;
+import com.l2jserver.gameserver.model.items.L2Item;
+import com.l2jserver.gameserver.model.skills.Skill;
 
 /**
  * The Class ConditionPlayerSubclass.
@@ -37,12 +39,12 @@ public class ConditionPlayerSubclass extends Condition
 	}
 	
 	@Override
-	public boolean testImpl(Env env)
+	public boolean testImpl(L2Character effector, L2Character effected, Skill skill, L2Item item)
 	{
-		if (env.getPlayer() == null)
+		if (effector.getActingPlayer() == null)
 		{
 			return true;
 		}
-		return env.getPlayer().isSubClassActive() == _val;
+		return effector.getActingPlayer().isSubClassActive() == _val;
 	}
 }

+ 5 - 3
L2J_Server/java/com/l2jserver/gameserver/model/conditions/ConditionPlayerTransformationId.java

@@ -18,8 +18,10 @@
  */
 package com.l2jserver.gameserver.model.conditions;
 
+import com.l2jserver.gameserver.model.actor.L2Character;
 import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;
-import com.l2jserver.gameserver.model.stats.Env;
+import com.l2jserver.gameserver.model.items.L2Item;
+import com.l2jserver.gameserver.model.skills.Skill;
 
 /**
  * This condition becomes true whether the player is transformed and the transformation Id match the parameter or<br>
@@ -40,9 +42,9 @@ public class ConditionPlayerTransformationId extends Condition
 	}
 	
 	@Override
-	public boolean testImpl(Env env)
+	public boolean testImpl(L2Character effector, L2Character effected, Skill skill, L2Item item)
 	{
-		final L2PcInstance player = env.getPlayer();
+		final L2PcInstance player = effector.getActingPlayer();
 		if (player == null)
 		{
 			return false;

+ 5 - 3
L2J_Server/java/com/l2jserver/gameserver/model/conditions/ConditionPlayerTvTEvent.java

@@ -18,9 +18,11 @@
  */
 package com.l2jserver.gameserver.model.conditions;
 
+import com.l2jserver.gameserver.model.actor.L2Character;
 import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;
 import com.l2jserver.gameserver.model.entity.TvTEvent;
-import com.l2jserver.gameserver.model.stats.Env;
+import com.l2jserver.gameserver.model.items.L2Item;
+import com.l2jserver.gameserver.model.skills.Skill;
 
 /**
  * The Class ConditionPlayerTvTEvent.
@@ -39,9 +41,9 @@ public class ConditionPlayerTvTEvent extends Condition
 	}
 	
 	@Override
-	public boolean testImpl(Env env)
+	public boolean testImpl(L2Character effector, L2Character effected, Skill skill, L2Item item)
 	{
-		final L2PcInstance player = env.getPlayer();
+		final L2PcInstance player = effector.getActingPlayer();
 		if ((player == null) || !TvTEvent.isStarted())
 		{
 			return !_val;

+ 6 - 4
L2J_Server/java/com/l2jserver/gameserver/model/conditions/ConditionPlayerVehicleMounted.java

@@ -18,7 +18,9 @@
  */
 package com.l2jserver.gameserver.model.conditions;
 
-import com.l2jserver.gameserver.model.stats.Env;
+import com.l2jserver.gameserver.model.actor.L2Character;
+import com.l2jserver.gameserver.model.items.L2Item;
+import com.l2jserver.gameserver.model.skills.Skill;
 
 /**
  * @author Nyaran
@@ -36,12 +38,12 @@ public class ConditionPlayerVehicleMounted extends Condition
 	}
 	
 	@Override
-	public boolean testImpl(Env env)
+	public boolean testImpl(L2Character effector, L2Character effected, Skill skill, L2Item item)
 	{
-		if (env.getPlayer() == null)
+		if (effector.getActingPlayer() == null)
 		{
 			return true;
 		}
-		return (env.getPlayer().isInVehicle() == _val);
+		return (effector.getActingPlayer().isInVehicle() == _val);
 	}
 }

+ 5 - 3
L2J_Server/java/com/l2jserver/gameserver/model/conditions/ConditionPlayerWeight.java

@@ -18,8 +18,10 @@
  */
 package com.l2jserver.gameserver.model.conditions;
 
+import com.l2jserver.gameserver.model.actor.L2Character;
 import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;
-import com.l2jserver.gameserver.model.stats.Env;
+import com.l2jserver.gameserver.model.items.L2Item;
+import com.l2jserver.gameserver.model.skills.Skill;
 
 /**
  * The Class ConditionPlayerWeight.
@@ -40,9 +42,9 @@ public class ConditionPlayerWeight extends Condition
 	}
 	
 	@Override
-	public boolean testImpl(Env env)
+	public boolean testImpl(L2Character effector, L2Character effected, Skill skill, L2Item item)
 	{
-		final L2PcInstance player = env.getPlayer();
+		final L2PcInstance player = effector.getActingPlayer();
 		if ((player != null) && (player.getMaxLoad() > 0))
 		{
 			int weightproc = (((player.getCurrentLoad() - player.getBonusWeightPenalty()) * 100) / player.getMaxLoad());

+ 4 - 3
L2J_Server/java/com/l2jserver/gameserver/model/conditions/ConditionSiegeZone.java

@@ -25,7 +25,8 @@ import com.l2jserver.gameserver.model.actor.L2Character;
 import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;
 import com.l2jserver.gameserver.model.entity.Castle;
 import com.l2jserver.gameserver.model.entity.Fort;
-import com.l2jserver.gameserver.model.stats.Env;
+import com.l2jserver.gameserver.model.items.L2Item;
+import com.l2jserver.gameserver.model.skills.Skill;
 
 /**
  * The Class ConditionSiegeZone.
@@ -59,9 +60,9 @@ public final class ConditionSiegeZone extends Condition
 	}
 	
 	@Override
-	public boolean testImpl(Env env)
+	public boolean testImpl(L2Character effector, L2Character effected, Skill skill, L2Item item)
 	{
-		L2Character target = _self ? env.getCharacter() : env.getTarget();
+		L2Character target = _self ? effector : effected;
 		Castle castle = CastleManager.getInstance().getCastle(target);
 		Fort fort = FortManager.getInstance().getFort(target);
 		

+ 9 - 8
L2J_Server/java/com/l2jserver/gameserver/model/conditions/ConditionSlotItemId.java

@@ -18,9 +18,10 @@
  */
 package com.l2jserver.gameserver.model.conditions;
 
-import com.l2jserver.gameserver.model.itemcontainer.Inventory;
+import com.l2jserver.gameserver.model.actor.L2Character;
+import com.l2jserver.gameserver.model.items.L2Item;
 import com.l2jserver.gameserver.model.items.instance.L2ItemInstance;
-import com.l2jserver.gameserver.model.stats.Env;
+import com.l2jserver.gameserver.model.skills.Skill;
 
 /**
  * The Class ConditionSlotItemId.
@@ -45,18 +46,18 @@ public final class ConditionSlotItemId extends ConditionInventory
 	}
 	
 	@Override
-	public boolean testImpl(Env env)
+	public boolean testImpl(L2Character effector, L2Character effected, Skill skill, L2Item item)
 	{
-		if (env.getPlayer() == null)
+		if ((effector == null) || !effector.isPlayer())
 		{
 			return false;
 		}
-		final Inventory inv = env.getPlayer().getInventory();
-		final L2ItemInstance item = inv.getPaperdollItem(_slot);
-		if (item == null)
+		
+		final L2ItemInstance itemSlot = effector.getInventory().getPaperdollItem(_slot);
+		if (itemSlot == null)
 		{
 			return _itemId == 0;
 		}
-		return (item.getId() == _itemId) && (item.getEnchantLevel() >= _enchantLevel);
+		return (itemSlot.getId() == _itemId) && (itemSlot.getEnchantLevel() >= _enchantLevel);
 	}
 }

+ 9 - 8
L2J_Server/java/com/l2jserver/gameserver/model/conditions/ConditionSlotItemType.java

@@ -18,9 +18,10 @@
  */
 package com.l2jserver.gameserver.model.conditions;
 
-import com.l2jserver.gameserver.model.itemcontainer.Inventory;
+import com.l2jserver.gameserver.model.actor.L2Character;
+import com.l2jserver.gameserver.model.items.L2Item;
 import com.l2jserver.gameserver.model.items.instance.L2ItemInstance;
-import com.l2jserver.gameserver.model.stats.Env;
+import com.l2jserver.gameserver.model.skills.Skill;
 
 /**
  * The Class ConditionSlotItemType.
@@ -42,18 +43,18 @@ public final class ConditionSlotItemType extends ConditionInventory
 	}
 	
 	@Override
-	public boolean testImpl(Env env)
+	public boolean testImpl(L2Character effector, L2Character effected, Skill skill, L2Item item)
 	{
-		if (env.getPlayer() == null)
+		if ((effector == null) || !effector.isPlayer())
 		{
 			return false;
 		}
-		final Inventory inv = env.getPlayer().getInventory();
-		final L2ItemInstance item = inv.getPaperdollItem(_slot);
-		if (item == null)
+		
+		final L2ItemInstance itemSlot = effector.getInventory().getPaperdollItem(_slot);
+		if (itemSlot == null)
 		{
 			return false;
 		}
-		return (item.getItem().getItemMask() & _mask) != 0;
+		return (itemSlot.getItem().getItemMask() & _mask) != 0;
 	}
 }

+ 5 - 3
L2J_Server/java/com/l2jserver/gameserver/model/conditions/ConditionTargetAbnormal.java

@@ -18,7 +18,9 @@
  */
 package com.l2jserver.gameserver.model.conditions;
 
-import com.l2jserver.gameserver.model.stats.Env;
+import com.l2jserver.gameserver.model.actor.L2Character;
+import com.l2jserver.gameserver.model.items.L2Item;
+import com.l2jserver.gameserver.model.skills.Skill;
 
 /**
  * The Class ConditionTargetAbnormal.
@@ -38,8 +40,8 @@ public class ConditionTargetAbnormal extends Condition
 	}
 	
 	@Override
-	public boolean testImpl(Env env)
+	public boolean testImpl(L2Character effector, L2Character effected, Skill skill, L2Item item)
 	{
-		return (env.getTarget().getAbnormalVisualEffects() & _abnormalId) != 0;
+		return (effected.getAbnormalVisualEffects() & _abnormalId) != 0;
 	}
 }

+ 5 - 3
L2J_Server/java/com/l2jserver/gameserver/model/conditions/ConditionTargetActiveEffectId.java

@@ -18,8 +18,10 @@
  */
 package com.l2jserver.gameserver.model.conditions;
 
+import com.l2jserver.gameserver.model.actor.L2Character;
+import com.l2jserver.gameserver.model.items.L2Item;
 import com.l2jserver.gameserver.model.skills.BuffInfo;
-import com.l2jserver.gameserver.model.stats.Env;
+import com.l2jserver.gameserver.model.skills.Skill;
 
 /**
  * The Class ConditionTargetActiveEffectId.
@@ -51,9 +53,9 @@ public class ConditionTargetActiveEffectId extends Condition
 	}
 	
 	@Override
-	public boolean testImpl(Env env)
+	public boolean testImpl(L2Character effector, L2Character effected, Skill skill, L2Item item)
 	{
-		final BuffInfo info = env.getTarget().getEffectList().getBuffInfoBySkillId(_effectId);
+		final BuffInfo info = effected.getEffectList().getBuffInfoBySkillId(_effectId);
 		if ((info != null) && ((_effectLvl == -1) || (_effectLvl <= info.getSkill().getLevel())))
 		{
 			return true;

+ 4 - 3
L2J_Server/java/com/l2jserver/gameserver/model/conditions/ConditionTargetActiveSkillId.java

@@ -18,8 +18,9 @@
  */
 package com.l2jserver.gameserver.model.conditions;
 
+import com.l2jserver.gameserver.model.actor.L2Character;
+import com.l2jserver.gameserver.model.items.L2Item;
 import com.l2jserver.gameserver.model.skills.Skill;
-import com.l2jserver.gameserver.model.stats.Env;
 
 /**
  * The Class ConditionTargetActiveSkillId.
@@ -51,9 +52,9 @@ public class ConditionTargetActiveSkillId extends Condition
 	}
 	
 	@Override
-	public boolean testImpl(Env env)
+	public boolean testImpl(L2Character effector, L2Character effected, Skill skill, L2Item item)
 	{
-		for (Skill sk : env.getTarget().getAllSkills())
+		for (Skill sk : effected.getAllSkills())
 		{
 			if (sk != null)
 			{

+ 7 - 7
L2J_Server/java/com/l2jserver/gameserver/model/conditions/ConditionTargetAggro.java

@@ -21,7 +21,8 @@ package com.l2jserver.gameserver.model.conditions;
 import com.l2jserver.gameserver.model.actor.L2Character;
 import com.l2jserver.gameserver.model.actor.instance.L2MonsterInstance;
 import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;
-import com.l2jserver.gameserver.model.stats.Env;
+import com.l2jserver.gameserver.model.items.L2Item;
+import com.l2jserver.gameserver.model.skills.Skill;
 
 /**
  * The Class ConditionTargetAggro.
@@ -42,16 +43,15 @@ public class ConditionTargetAggro extends Condition
 	}
 	
 	@Override
-	public boolean testImpl(Env env)
+	public boolean testImpl(L2Character effector, L2Character effected, Skill skill, L2Item item)
 	{
-		final L2Character target = env.getTarget();
-		if (target instanceof L2MonsterInstance)
+		if (effected instanceof L2MonsterInstance)
 		{
-			return ((L2MonsterInstance) target).isAggressive() == _isAggro;
+			return ((L2MonsterInstance) effected).isAggressive() == _isAggro;
 		}
-		if (target instanceof L2PcInstance)
+		if (effected instanceof L2PcInstance)
 		{
-			return ((L2PcInstance) target).getKarma() > 0;
+			return ((L2PcInstance) effected).getKarma() > 0;
 		}
 		return false;
 	}

+ 9 - 7
L2J_Server/java/com/l2jserver/gameserver/model/conditions/ConditionTargetClassIdRestriction.java

@@ -18,34 +18,36 @@
  */
 package com.l2jserver.gameserver.model.conditions;
 
-import java.util.ArrayList;
+import java.util.List;
 
+import com.l2jserver.gameserver.model.actor.L2Character;
 import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;
-import com.l2jserver.gameserver.model.stats.Env;
+import com.l2jserver.gameserver.model.items.L2Item;
+import com.l2jserver.gameserver.model.skills.Skill;
 
 /**
  * The Class ConditionTargetClassIdRestriction.
  */
 public class ConditionTargetClassIdRestriction extends Condition
 {
-	private final ArrayList<Integer> _classIds;
+	private final List<Integer> _classIds;
 	
 	/**
 	 * Instantiates a new condition target class id restriction.
 	 * @param classId the class id
 	 */
-	public ConditionTargetClassIdRestriction(ArrayList<Integer> classId)
+	public ConditionTargetClassIdRestriction(List<Integer> classId)
 	{
 		_classIds = classId;
 	}
 	
 	@Override
-	public boolean testImpl(Env env)
+	public boolean testImpl(L2Character effector, L2Character effected, Skill skill, L2Item item)
 	{
-		if (!(env.getTarget() instanceof L2PcInstance))
+		if (!(effected instanceof L2PcInstance))
 		{
 			return false;
 		}
-		return (_classIds.contains(((L2PcInstance) env.getTarget()).getClassId().getId()));
+		return (_classIds.contains((effected.getActingPlayer()).getClassId().getId()));
 	}
 }

+ 5 - 5
L2J_Server/java/com/l2jserver/gameserver/model/conditions/ConditionTargetInvSize.java

@@ -20,7 +20,8 @@ package com.l2jserver.gameserver.model.conditions;
 
 import com.l2jserver.gameserver.model.actor.L2Character;
 import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;
-import com.l2jserver.gameserver.model.stats.Env;
+import com.l2jserver.gameserver.model.items.L2Item;
+import com.l2jserver.gameserver.model.skills.Skill;
 
 /**
  * The Class ConditionTargetInvSize.
@@ -40,12 +41,11 @@ public class ConditionTargetInvSize extends Condition
 	}
 	
 	@Override
-	public boolean testImpl(Env env)
+	public boolean testImpl(L2Character effector, L2Character effected, Skill skill, L2Item item)
 	{
-		final L2Character targetObj = env.getTarget();
-		if ((targetObj != null) && targetObj.isPlayer())
+		if ((effected != null) && effected.isPlayer())
 		{
-			final L2PcInstance target = targetObj.getActingPlayer();
+			final L2PcInstance target = effected.getActingPlayer();
 			return target.getInventory().getSize(false) <= (target.getInventoryLimit() - _size);
 		}
 		return false;

+ 6 - 4
L2J_Server/java/com/l2jserver/gameserver/model/conditions/ConditionTargetLevel.java

@@ -18,7 +18,9 @@
  */
 package com.l2jserver.gameserver.model.conditions;
 
-import com.l2jserver.gameserver.model.stats.Env;
+import com.l2jserver.gameserver.model.actor.L2Character;
+import com.l2jserver.gameserver.model.items.L2Item;
+import com.l2jserver.gameserver.model.skills.Skill;
 
 /**
  * The Class ConditionTargetLevel.
@@ -39,12 +41,12 @@ public class ConditionTargetLevel extends Condition
 	}
 	
 	@Override
-	public boolean testImpl(Env env)
+	public boolean testImpl(L2Character effector, L2Character effected, Skill skill, L2Item item)
 	{
-		if (env.getTarget() == null)
+		if (effected == null)
 		{
 			return false;
 		}
-		return env.getTarget().getLevel() >= _level;
+		return effected.getLevel() >= _level;
 	}
 }

+ 6 - 4
L2J_Server/java/com/l2jserver/gameserver/model/conditions/ConditionTargetLevelRange.java

@@ -18,7 +18,9 @@
  */
 package com.l2jserver.gameserver.model.conditions;
 
-import com.l2jserver.gameserver.model.stats.Env;
+import com.l2jserver.gameserver.model.actor.L2Character;
+import com.l2jserver.gameserver.model.items.L2Item;
+import com.l2jserver.gameserver.model.skills.Skill;
 
 /**
  * @author UnAfraid
@@ -37,13 +39,13 @@ public class ConditionTargetLevelRange extends Condition
 	}
 	
 	@Override
-	public boolean testImpl(Env env)
+	public boolean testImpl(L2Character effector, L2Character effected, Skill skill, L2Item item)
 	{
-		if (env.getTarget() == null)
+		if (effected == null)
 		{
 			return false;
 		}
-		final int level = env.getTarget().getLevel();
+		final int level = effected.getLevel();
 		return ((level >= _levels[0]) && (level <= _levels[1]));
 	}
 }

+ 8 - 8
L2J_Server/java/com/l2jserver/gameserver/model/conditions/ConditionTargetMyPartyExceptMe.java

@@ -20,7 +20,8 @@ package com.l2jserver.gameserver.model.conditions;
 
 import com.l2jserver.gameserver.model.actor.L2Character;
 import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;
-import com.l2jserver.gameserver.model.stats.Env;
+import com.l2jserver.gameserver.model.items.L2Item;
+import com.l2jserver.gameserver.model.skills.Skill;
 import com.l2jserver.gameserver.network.SystemMessageId;
 import com.l2jserver.gameserver.network.serverpackets.SystemMessage;
 
@@ -38,24 +39,23 @@ public class ConditionTargetMyPartyExceptMe extends Condition
 	}
 	
 	@Override
-	public boolean testImpl(Env env)
+	public boolean testImpl(L2Character effector, L2Character effected, Skill skill, L2Item item)
 	{
 		boolean isPartyMember = true;
-		final L2PcInstance player = env.getPlayer();
-		final L2Character target = env.getTarget();
-		if ((player == null) || (target == null) || !target.isPlayer())
+		final L2PcInstance player = effector.getActingPlayer();
+		if ((player == null) || (effected == null) || !effected.isPlayer())
 		{
 			isPartyMember = false;
 		}
-		else if (player == target)
+		else if (player == effected)
 		{
 			player.sendPacket(SystemMessageId.CANNOT_USE_ON_YOURSELF);
 			isPartyMember = false;
 		}
-		else if (!player.isInParty() || !player.getParty().equals(target.getParty()))
+		else if (!player.isInParty() || !player.getParty().equals(effected.getParty()))
 		{
 			final SystemMessage sm = SystemMessage.getSystemMessage(SystemMessageId.S1_CANNOT_BE_USED);
-			sm.addSkillName(env.getSkill());
+			sm.addSkillName(skill);
 			player.sendPacket(sm);
 			isPartyMember = false;
 		}

+ 5 - 3
L2J_Server/java/com/l2jserver/gameserver/model/conditions/ConditionTargetNone.java

@@ -18,7 +18,9 @@
  */
 package com.l2jserver.gameserver.model.conditions;
 
-import com.l2jserver.gameserver.model.stats.Env;
+import com.l2jserver.gameserver.model.actor.L2Character;
+import com.l2jserver.gameserver.model.items.L2Item;
+import com.l2jserver.gameserver.model.skills.Skill;
 
 /**
  * The Class ConditionTargetNone.
@@ -35,8 +37,8 @@ public class ConditionTargetNone extends Condition
 	}
 	
 	@Override
-	public boolean testImpl(Env env)
+	public boolean testImpl(L2Character effector, L2Character effected, Skill skill, L2Item item)
 	{
-		return (env.getTarget() == null);
+		return (effected == null);
 	}
 }

+ 9 - 7
L2J_Server/java/com/l2jserver/gameserver/model/conditions/ConditionTargetNpcId.java

@@ -18,32 +18,34 @@
  */
 package com.l2jserver.gameserver.model.conditions;
 
-import java.util.ArrayList;
+import java.util.List;
 
-import com.l2jserver.gameserver.model.stats.Env;
+import com.l2jserver.gameserver.model.actor.L2Character;
+import com.l2jserver.gameserver.model.items.L2Item;
+import com.l2jserver.gameserver.model.skills.Skill;
 
 /**
  * The Class ConditionTargetNpcId.
  */
 public class ConditionTargetNpcId extends Condition
 {
-	private final ArrayList<Integer> _npcIds;
+	private final List<Integer> _npcIds;
 	
 	/**
 	 * Instantiates a new condition target npc id.
 	 * @param npcIds the npc ids
 	 */
-	public ConditionTargetNpcId(ArrayList<Integer> npcIds)
+	public ConditionTargetNpcId(List<Integer> npcIds)
 	{
 		_npcIds = npcIds;
 	}
 	
 	@Override
-	public boolean testImpl(Env env)
+	public boolean testImpl(L2Character effector, L2Character effected, Skill skill, L2Item item)
 	{
-		if ((env.getTarget() != null) && (env.getTarget().isNpc() || env.getTarget().isDoor()))
+		if ((effected != null) && (effected.isNpc() || effected.isDoor()))
 		{
-			return _npcIds.contains(env.getTarget().getId());
+			return _npcIds.contains(effected.getId());
 		}
 		return false;
 	}

+ 6 - 4
L2J_Server/java/com/l2jserver/gameserver/model/conditions/ConditionTargetNpcType.java

@@ -19,7 +19,9 @@
 package com.l2jserver.gameserver.model.conditions;
 
 import com.l2jserver.gameserver.enums.InstanceType;
-import com.l2jserver.gameserver.model.stats.Env;
+import com.l2jserver.gameserver.model.actor.L2Character;
+import com.l2jserver.gameserver.model.items.L2Item;
+import com.l2jserver.gameserver.model.skills.Skill;
 
 /**
  * The Class ConditionTargetNpcType.
@@ -38,12 +40,12 @@ public class ConditionTargetNpcType extends Condition
 	}
 	
 	@Override
-	public boolean testImpl(Env env)
+	public boolean testImpl(L2Character effector, L2Character effected, Skill skill, L2Item item)
 	{
-		if (env.getTarget() == null)
+		if (effected == null)
 		{
 			return false;
 		}
-		return env.getTarget().getInstanceType().isTypes(_npcType);
+		return effected.getInstanceType().isTypes(_npcType);
 	}
 }

+ 5 - 3
L2J_Server/java/com/l2jserver/gameserver/model/conditions/ConditionTargetPlayable.java

@@ -18,8 +18,10 @@
  */
 package com.l2jserver.gameserver.model.conditions;
 
+import com.l2jserver.gameserver.model.actor.L2Character;
 import com.l2jserver.gameserver.model.actor.L2Playable;
-import com.l2jserver.gameserver.model.stats.Env;
+import com.l2jserver.gameserver.model.items.L2Item;
+import com.l2jserver.gameserver.model.skills.Skill;
 
 /**
  * @author DS
@@ -27,8 +29,8 @@ import com.l2jserver.gameserver.model.stats.Env;
 public class ConditionTargetPlayable extends Condition
 {
 	@Override
-	public boolean testImpl(Env env)
+	public boolean testImpl(L2Character effector, L2Character effected, Skill skill, L2Item item)
 	{
-		return (env.getTarget() instanceof L2Playable);
+		return (effected instanceof L2Playable);
 	}
 }

+ 5 - 3
L2J_Server/java/com/l2jserver/gameserver/model/conditions/ConditionTargetRace.java

@@ -19,7 +19,9 @@
 package com.l2jserver.gameserver.model.conditions;
 
 import com.l2jserver.gameserver.enums.Race;
-import com.l2jserver.gameserver.model.stats.Env;
+import com.l2jserver.gameserver.model.actor.L2Character;
+import com.l2jserver.gameserver.model.items.L2Item;
+import com.l2jserver.gameserver.model.skills.Skill;
 
 /**
  * The Class ConditionTargetRace.
@@ -39,8 +41,8 @@ public class ConditionTargetRace extends Condition
 	}
 	
 	@Override
-	public boolean testImpl(Env env)
+	public boolean testImpl(L2Character effector, L2Character effected, Skill skill, L2Item item)
 	{
-		return _race == env.getTarget().getRace();
+		return _race == effected.getRace();
 	}
 }

+ 8 - 6
L2J_Server/java/com/l2jserver/gameserver/model/conditions/ConditionTargetUsesWeaponKind.java

@@ -18,8 +18,10 @@
  */
 package com.l2jserver.gameserver.model.conditions;
 
+import com.l2jserver.gameserver.model.actor.L2Character;
+import com.l2jserver.gameserver.model.items.L2Item;
 import com.l2jserver.gameserver.model.items.L2Weapon;
-import com.l2jserver.gameserver.model.stats.Env;
+import com.l2jserver.gameserver.model.skills.Skill;
 
 /**
  * The Class ConditionTargetUsesWeaponKind.
@@ -39,19 +41,19 @@ public class ConditionTargetUsesWeaponKind extends Condition
 	}
 	
 	@Override
-	public boolean testImpl(Env env)
+	public boolean testImpl(L2Character effector, L2Character effected, Skill skill, L2Item item)
 	{
-		if (env.getTarget() == null)
+		if (effected == null)
 		{
 			return false;
 		}
 		
-		L2Weapon item = env.getTarget().getActiveWeaponItem();
-		if (item == null)
+		L2Weapon weapon = effected.getActiveWeaponItem();
+		if (weapon == null)
 		{
 			return false;
 		}
 		
-		return (item.getItemType().mask() & _weaponMask) != 0;
+		return (weapon.getItemType().mask() & _weaponMask) != 0;
 	}
 }

+ 5 - 5
L2J_Server/java/com/l2jserver/gameserver/model/conditions/ConditionTargetWeight.java

@@ -20,7 +20,8 @@ package com.l2jserver.gameserver.model.conditions;
 
 import com.l2jserver.gameserver.model.actor.L2Character;
 import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;
-import com.l2jserver.gameserver.model.stats.Env;
+import com.l2jserver.gameserver.model.items.L2Item;
+import com.l2jserver.gameserver.model.skills.Skill;
 
 /**
  * The Class ConditionTargetWeight.
@@ -40,12 +41,11 @@ public class ConditionTargetWeight extends Condition
 	}
 	
 	@Override
-	public boolean testImpl(Env env)
+	public boolean testImpl(L2Character effector, L2Character effected, Skill skill, L2Item item)
 	{
-		final L2Character targetObj = env.getTarget();
-		if ((targetObj != null) && targetObj.isPlayer())
+		if ((effected != null) && effected.isPlayer())
 		{
-			final L2PcInstance target = targetObj.getActingPlayer();
+			final L2PcInstance target = effected.getActingPlayer();
 			if (!target.getDietMode() && (target.getMaxLoad() > 0))
 			{
 				int weightproc = (((target.getCurrentLoad() - target.getBonusWeightPenalty()) * 100) / target.getMaxLoad());

+ 5 - 4
L2J_Server/java/com/l2jserver/gameserver/model/conditions/ConditionUsingItemType.java

@@ -18,11 +18,12 @@
  */
 package com.l2jserver.gameserver.model.conditions;
 
+import com.l2jserver.gameserver.model.actor.L2Character;
 import com.l2jserver.gameserver.model.itemcontainer.Inventory;
 import com.l2jserver.gameserver.model.items.L2Item;
 import com.l2jserver.gameserver.model.items.instance.L2ItemInstance;
 import com.l2jserver.gameserver.model.items.type.ArmorType;
-import com.l2jserver.gameserver.model.stats.Env;
+import com.l2jserver.gameserver.model.skills.Skill;
 
 /**
  * The Class ConditionUsingItemType.
@@ -44,14 +45,14 @@ public final class ConditionUsingItemType extends Condition
 	}
 	
 	@Override
-	public boolean testImpl(Env env)
+	public boolean testImpl(L2Character effector, L2Character effected, Skill skill, L2Item item)
 	{
-		if ((env.getCharacter() == null) || !env.getCharacter().isPlayer())
+		if ((effector == null) || !effector.isPlayer())
 		{
 			return false;
 		}
 		
-		final Inventory inv = env.getPlayer().getInventory();
+		final Inventory inv = effector.getInventory();
 		// If ConditionUsingItemType is one between Light, Heavy or Magic
 		if (_armor)
 		{

+ 6 - 4
L2J_Server/java/com/l2jserver/gameserver/model/conditions/ConditionUsingSkill.java

@@ -18,7 +18,9 @@
  */
 package com.l2jserver.gameserver.model.conditions;
 
-import com.l2jserver.gameserver.model.stats.Env;
+import com.l2jserver.gameserver.model.actor.L2Character;
+import com.l2jserver.gameserver.model.items.L2Item;
+import com.l2jserver.gameserver.model.skills.Skill;
 
 /**
  * The Class ConditionUsingSkill.
@@ -38,12 +40,12 @@ public final class ConditionUsingSkill extends Condition
 	}
 	
 	@Override
-	public boolean testImpl(Env env)
+	public boolean testImpl(L2Character effector, L2Character effected, Skill skill, L2Item item)
 	{
-		if (env.getSkill() == null)
+		if (skill == null)
 		{
 			return false;
 		}
-		return env.getSkill().getId() == _skillId;
+		return skill.getId() == _skillId;
 	}
 }

+ 6 - 4
L2J_Server/java/com/l2jserver/gameserver/model/conditions/ConditionUsingSlotType.java

@@ -18,7 +18,9 @@
  */
 package com.l2jserver.gameserver.model.conditions;
 
-import com.l2jserver.gameserver.model.stats.Env;
+import com.l2jserver.gameserver.model.actor.L2Character;
+import com.l2jserver.gameserver.model.items.L2Item;
+import com.l2jserver.gameserver.model.skills.Skill;
 
 /**
  * @author Nos
@@ -33,14 +35,14 @@ public class ConditionUsingSlotType extends Condition
 	}
 	
 	@Override
-	public boolean testImpl(Env env)
+	public boolean testImpl(L2Character effector, L2Character effected, Skill skill, L2Item item)
 	{
-		if ((env.getCharacter() == null) || !env.getCharacter().isPlayer())
+		if ((effector == null) || !effector.isPlayer())
 		{
 			return false;
 		}
 		
-		return (env.getPlayer().getActiveWeaponItem().getBodyPart() & _mask) != 0;
+		return (effector.getActiveWeaponItem().getBodyPart() & _mask) != 0;
 	}
 	
 }

+ 5 - 3
L2J_Server/java/com/l2jserver/gameserver/model/conditions/ConditionWithSkill.java

@@ -18,7 +18,9 @@
  */
 package com.l2jserver.gameserver.model.conditions;
 
-import com.l2jserver.gameserver.model.stats.Env;
+import com.l2jserver.gameserver.model.actor.L2Character;
+import com.l2jserver.gameserver.model.items.L2Item;
+import com.l2jserver.gameserver.model.skills.Skill;
 
 /**
  * The Class ConditionWithSkill.
@@ -38,8 +40,8 @@ public class ConditionWithSkill extends Condition
 	}
 	
 	@Override
-	public boolean testImpl(Env env)
+	public boolean testImpl(L2Character effector, L2Character effected, Skill skill, L2Item item)
 	{
-		return (env.getSkill() != null) == _skill;
+		return (skill != null) == _skill;
 	}
 }

+ 20 - 15
L2J_Server/java/com/l2jserver/gameserver/model/effects/AbstractEffect.java

@@ -28,11 +28,12 @@ import java.util.logging.Logger;
 import com.l2jserver.Config;
 import com.l2jserver.gameserver.handler.EffectHandler;
 import com.l2jserver.gameserver.model.StatsSet;
+import com.l2jserver.gameserver.model.actor.L2Character;
 import com.l2jserver.gameserver.model.conditions.Condition;
 import com.l2jserver.gameserver.model.skills.BuffInfo;
-import com.l2jserver.gameserver.model.skills.funcs.Func;
-import com.l2jserver.gameserver.model.skills.funcs.FuncTemplate;
-import com.l2jserver.gameserver.model.stats.Env;
+import com.l2jserver.gameserver.model.skills.Skill;
+import com.l2jserver.gameserver.model.stats.functions.AbstractFunction;
+import com.l2jserver.gameserver.model.stats.functions.FuncTemplate;
 
 /**
  * Abstract effect implementation.<br>
@@ -114,12 +115,14 @@ public abstract class AbstractEffect
 	
 	/**
 	 * Tests the attach condition.
-	 * @param env the data
+	 * @param caster the caster
+	 * @param target the target
+	 * @param skill the skill
 	 * @return {@code true} if there isn't a condition to test or it's passed, {@code false} otherwise
 	 */
-	public boolean testConditions(Env env)
+	public boolean testConditions(L2Character caster, L2Character target, Skill skill)
 	{
-		return (_attachCond == null) || _attachCond.test(env);
+		return (_attachCond == null) || _attachCond.test(caster, target, skill);
 	}
 	
 	/**
@@ -228,26 +231,28 @@ public abstract class AbstractEffect
 	
 	/**
 	 * Get this effect's stats functions.
-	 * @param env the data
+	 * @param caster the caster
+	 * @param target the target
+	 * @param skill the skill
 	 * @return a list of stat functions.
 	 */
-	public List<Func> getStatFuncs(Env env)
+	public List<AbstractFunction> getStatFuncs(L2Character caster, L2Character target, Skill skill)
 	{
 		if (getFuncTemplates() == null)
 		{
-			return Collections.<Func> emptyList();
+			return Collections.<AbstractFunction> emptyList();
 		}
 		
-		final List<Func> funcs = new ArrayList<>(getFuncTemplates().size());
-		for (FuncTemplate t : getFuncTemplates())
+		final List<AbstractFunction> functions = new ArrayList<>(getFuncTemplates().size());
+		for (FuncTemplate functionTemplate : getFuncTemplates())
 		{
-			final Func f = t.getFunc(env, this);
-			if (f != null)
+			final AbstractFunction function = functionTemplate.getFunc(caster, target, skill, this);
+			if (function != null)
 			{
-				funcs.add(f);
+				functions.add(function);
 			}
 		}
-		return funcs;
+		return functions;
 	}
 	
 	/**

+ 16 - 77
L2J_Server/java/com/l2jserver/gameserver/model/items/L2Item.java

@@ -34,7 +34,6 @@ import com.l2jserver.gameserver.model.actor.L2Character;
 import com.l2jserver.gameserver.model.actor.L2Summon;
 import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;
 import com.l2jserver.gameserver.model.conditions.Condition;
-import com.l2jserver.gameserver.model.effects.AbstractEffect;
 import com.l2jserver.gameserver.model.events.ListenersContainer;
 import com.l2jserver.gameserver.model.holders.SkillHolder;
 import com.l2jserver.gameserver.model.interfaces.IIdentifiable;
@@ -44,11 +43,9 @@ import com.l2jserver.gameserver.model.items.type.CrystalType;
 import com.l2jserver.gameserver.model.items.type.EtcItemType;
 import com.l2jserver.gameserver.model.items.type.ItemType;
 import com.l2jserver.gameserver.model.items.type.MaterialType;
-import com.l2jserver.gameserver.model.skills.BuffInfo;
 import com.l2jserver.gameserver.model.skills.Skill;
-import com.l2jserver.gameserver.model.skills.funcs.Func;
-import com.l2jserver.gameserver.model.skills.funcs.FuncTemplate;
-import com.l2jserver.gameserver.model.stats.Env;
+import com.l2jserver.gameserver.model.stats.functions.AbstractFunction;
+import com.l2jserver.gameserver.model.stats.functions.FuncTemplate;
 import com.l2jserver.gameserver.network.SystemMessageId;
 import com.l2jserver.gameserver.network.serverpackets.SystemMessage;
 import com.l2jserver.util.StringUtil;
@@ -151,7 +148,6 @@ public abstract class L2Item extends ListenersContainer implements IIdentifiable
 	protected int _type2; // different lists for armor, weapon, etc
 	protected Elementals[] _elementals = null;
 	protected List<FuncTemplate> _funcTemplates;
-	protected List<AbstractEffect> _effects;
 	protected List<Condition> _preConditions;
 	private SkillHolder[] _skillHolder;
 	private SkillHolder _unequipSkill = null;
@@ -680,21 +676,17 @@ public abstract class L2Item extends ListenersContainer implements IIdentifiable
 	 * @param player : L2Character pointing out the player
 	 * @return the list of functions
 	 */
-	public final List<Func> getStatFuncs(L2ItemInstance item, L2Character player)
+	public final List<AbstractFunction> getStatFuncs(L2ItemInstance item, L2Character player)
 	{
 		if ((_funcTemplates == null) || _funcTemplates.isEmpty())
 		{
-			return Collections.<Func> emptyList();
+			return Collections.<AbstractFunction> emptyList();
 		}
 		
-		final List<Func> funcs = new ArrayList<>(_funcTemplates.size());
-		final Env env = new Env();
-		env.setCharacter(player);
-		env.setTarget(player);
-		env.setItem(item);
+		final List<AbstractFunction> funcs = new ArrayList<>(_funcTemplates.size());
 		for (FuncTemplate t : _funcTemplates)
 		{
-			Func f = t.getFunc(env, item);
+			AbstractFunction f = t.getFunc(player, player, item, item);
 			if (f != null)
 			{
 				funcs.add(f);
@@ -703,71 +695,37 @@ public abstract class L2Item extends ListenersContainer implements IIdentifiable
 		return funcs;
 	}
 	
-	/**
-	 * Applies the effects from this item to the creature.
-	 * @param item the item
-	 * @param creature the creature
-	 */
-	public void applyEffects(L2ItemInstance item, L2Character creature)
-	{
-		if ((_effects == null) || _effects.isEmpty())
-		{
-			return;
-		}
-		
-		final Env env = new Env();
-		env.setCharacter(creature);
-		env.setTarget(creature);
-		env.setItem(item);
-		final BuffInfo info = new BuffInfo(env);
-		for (AbstractEffect effect : _effects)
-		{
-			if (effect.calcSuccess(info))
-			{
-				effect.onStart(info);
-			}
-		}
-	}
-	
-	/**
-	 * Returns effects of skills associated with the item.
-	 * @param caster : L2Character pointing out the caster
-	 * @param target : L2Character pointing out the target
-	 * @return L2Effect[] : array of effects generated by the skill public L2Effect[] getSkillEffects(L2Character caster, L2Character target) { if (_skills == null) return _emptyEffectSet; List<L2Effect> effects = new FastList<L2Effect>(); for (L2Skill skill : _skills) { if
-	 *         (!skill.checkCondition(caster, target, true)) continue; // Skill condition not met if (target.getFirstEffect(skill.getId()) != null) target.removeEffect(target.getFirstEffect(skill.getId())); for (L2Effect e : skill.getEffects(caster, target)) effects.add(e); } if (effects.isEmpty())
-	 *         return _emptyEffectSet; return effects.toArray(new L2Effect[effects.size()]); }
-	 */
 	/**
 	 * Add the FuncTemplate f to the list of functions used with the item
 	 * @param f : FuncTemplate to add
 	 */
 	public void attach(FuncTemplate f)
 	{
-		switch (f.stat)
+		switch (f.getStat())
 		{
 			case FIRE_RES:
 			case FIRE_POWER:
-				setElementals(new Elementals(Elementals.FIRE, (int) f.value));
+				setElementals(new Elementals(Elementals.FIRE, (int) f.getValue()));
 				break;
 			case WATER_RES:
 			case WATER_POWER:
-				setElementals(new Elementals(Elementals.WATER, (int) f.value));
+				setElementals(new Elementals(Elementals.WATER, (int) f.getValue()));
 				break;
 			case WIND_RES:
 			case WIND_POWER:
-				setElementals(new Elementals(Elementals.WIND, (int) f.value));
+				setElementals(new Elementals(Elementals.WIND, (int) f.getValue()));
 				break;
 			case EARTH_RES:
 			case EARTH_POWER:
-				setElementals(new Elementals(Elementals.EARTH, (int) f.value));
+				setElementals(new Elementals(Elementals.EARTH, (int) f.getValue()));
 				break;
 			case HOLY_RES:
 			case HOLY_POWER:
-				setElementals(new Elementals(Elementals.HOLY, (int) f.value));
+				setElementals(new Elementals(Elementals.HOLY, (int) f.getValue()));
 				break;
 			case DARK_RES:
 			case DARK_POWER:
-				setElementals(new Elementals(Elementals.DARK, (int) f.value));
+				setElementals(new Elementals(Elementals.DARK, (int) f.getValue()));
 				break;
 		}
 		
@@ -778,19 +736,6 @@ public abstract class L2Item extends ListenersContainer implements IIdentifiable
 		_funcTemplates.add(f);
 	}
 	
-	/**
-	 * Add the EffectTemplate effect to the list of effects generated by the item
-	 * @param effect : EffectTemplate
-	 */
-	public void attach(AbstractEffect effect)
-	{
-		if (_effects == null)
-		{
-			_effects = new ArrayList<>(1);
-		}
-		_effects.add(effect);
-	}
-	
 	public final void attach(Condition c)
 	{
 		if (_preConditions == null)
@@ -825,7 +770,7 @@ public abstract class L2Item extends ListenersContainer implements IIdentifiable
 		return _unequipSkill == null ? null : _unequipSkill.getSkill();
 	}
 	
-	public boolean checkCondition(L2Character activeChar, L2Object target, boolean sendMessage)
+	public boolean checkCondition(L2Character activeChar, L2Object object, boolean sendMessage)
 	{
 		if (activeChar.canOverrideCond(PcCondOverride.ITEM_CONDITIONS) && !Config.GM_ITEM_RESTRICTION)
 		{
@@ -851,13 +796,7 @@ public abstract class L2Item extends ListenersContainer implements IIdentifiable
 			return true;
 		}
 		
-		Env env = new Env();
-		env.setCharacter(activeChar);
-		if (target instanceof L2Character)
-		{
-			env.setTarget((L2Character) target);
-		}
-		
+		final L2Character target = (object instanceof L2Character) ? (L2Character) object : null;
 		for (Condition preCondition : _preConditions)
 		{
 			if (preCondition == null)
@@ -865,7 +804,7 @@ public abstract class L2Item extends ListenersContainer implements IIdentifiable
 				continue;
 			}
 			
-			if (!preCondition.test(env))
+			if (!preCondition.test(activeChar, target, null, null))
 			{
 				if (activeChar instanceof L2Summon)
 				{

+ 2 - 11
L2J_Server/java/com/l2jserver/gameserver/model/items/L2Weapon.java

@@ -31,7 +31,6 @@ import com.l2jserver.gameserver.model.events.impl.character.npc.OnNpcSkillSee;
 import com.l2jserver.gameserver.model.holders.SkillHolder;
 import com.l2jserver.gameserver.model.items.type.WeaponType;
 import com.l2jserver.gameserver.model.skills.Skill;
-import com.l2jserver.gameserver.model.stats.Env;
 import com.l2jserver.gameserver.model.stats.Formulas;
 import com.l2jserver.gameserver.network.SystemMessageId;
 import com.l2jserver.gameserver.network.serverpackets.SystemMessage;
@@ -353,11 +352,7 @@ public final class L2Weapon extends L2Item
 		final Skill onCritSkill = _skillsOnCrit.getSkill();
 		if (_skillsOnCritCondition != null)
 		{
-			Env env = new Env();
-			env.setCharacter(caster);
-			env.setTarget(target);
-			env.setSkill(onCritSkill);
-			if (!_skillsOnCritCondition.test(env))
+			if (!_skillsOnCritCondition.test(caster, target, onCritSkill))
 			{
 				// Chance not met
 				return;
@@ -406,11 +401,7 @@ public final class L2Weapon extends L2Item
 		
 		if (_skillsOnMagicCondition != null)
 		{
-			Env env = new Env();
-			env.setCharacter(caster);
-			env.setTarget(target);
-			env.setSkill(onMagicSkill);
-			if (!_skillsOnMagicCondition.test(env))
+			if (!_skillsOnMagicCondition.test(caster, target, onMagicSkill))
 			{
 				// Chance not met
 				return;

+ 2 - 2
L2J_Server/java/com/l2jserver/gameserver/model/items/instance/L2ItemInstance.java

@@ -73,7 +73,7 @@ import com.l2jserver.gameserver.model.items.type.ItemType;
 import com.l2jserver.gameserver.model.options.EnchantOptions;
 import com.l2jserver.gameserver.model.options.Options;
 import com.l2jserver.gameserver.model.quest.QuestState;
-import com.l2jserver.gameserver.model.skills.funcs.Func;
+import com.l2jserver.gameserver.model.stats.functions.AbstractFunction;
 import com.l2jserver.gameserver.network.SystemMessageId;
 import com.l2jserver.gameserver.network.serverpackets.DropItem;
 import com.l2jserver.gameserver.network.serverpackets.GetItem;
@@ -1423,7 +1423,7 @@ public final class L2ItemInstance extends L2Object
 	 * @param player the player
 	 * @return the functions list
 	 */
-	public List<Func> getStatFuncs(L2Character player)
+	public List<AbstractFunction> getStatFuncs(L2Character player)
 	{
 		return getItem().getStatFuncs(this, player);
 	}

+ 10 - 15
L2J_Server/java/com/l2jserver/gameserver/model/options/Options.java

@@ -27,9 +27,8 @@ import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;
 import com.l2jserver.gameserver.model.holders.SkillHolder;
 import com.l2jserver.gameserver.model.items.instance.L2ItemInstance;
 import com.l2jserver.gameserver.model.skills.Skill;
-import com.l2jserver.gameserver.model.skills.funcs.Func;
-import com.l2jserver.gameserver.model.skills.funcs.FuncTemplate;
-import com.l2jserver.gameserver.model.stats.Env;
+import com.l2jserver.gameserver.model.stats.functions.AbstractFunction;
+import com.l2jserver.gameserver.model.stats.functions.FuncTemplate;
 import com.l2jserver.gameserver.network.serverpackets.SkillCoolTime;
 
 /**
@@ -63,26 +62,22 @@ public class Options
 		return !_funcs.isEmpty();
 	}
 	
-	public List<Func> getStatFuncs(L2ItemInstance item, L2Character player)
+	public List<AbstractFunction> getStatFuncs(L2ItemInstance item, L2Character player)
 	{
 		if (_funcs.isEmpty())
 		{
-			return Collections.<Func> emptyList();
+			return Collections.<AbstractFunction> emptyList();
 		}
 		
-		final List<Func> funcs = new ArrayList<>(_funcs.size());
-		final Env env = new Env();
-		env.setCharacter(player);
-		env.setTarget(player);
-		env.setItem(item);
-		for (FuncTemplate t : _funcs)
+		final List<AbstractFunction> funcs = new ArrayList<>(_funcs.size());
+		for (FuncTemplate fuctionTemplate : _funcs)
 		{
-			Func f = t.getFunc(env, this);
-			if (f != null)
+			AbstractFunction fuction = fuctionTemplate.getFunc(player, player, item, this);
+			if (fuction != null)
 			{
-				funcs.add(f);
+				funcs.add(fuction);
 			}
-			player.sendDebugMessage("Adding stats: " + t.stat + " val: " + t.value);
+			player.sendDebugMessage("Adding stats: " + fuctionTemplate.getStat() + " val: " + fuctionTemplate.getValue());
 		}
 		return funcs;
 	}

+ 46 - 46
L2J_Server/java/com/l2jserver/gameserver/model/skills/BuffInfo.java

@@ -34,7 +34,6 @@ import com.l2jserver.gameserver.model.actor.L2Summon;
 import com.l2jserver.gameserver.model.effects.AbstractEffect;
 import com.l2jserver.gameserver.model.effects.EffectTaskInfo;
 import com.l2jserver.gameserver.model.effects.EffectTickTask;
-import com.l2jserver.gameserver.model.stats.Env;
 import com.l2jserver.gameserver.model.stats.Formulas;
 import com.l2jserver.gameserver.network.SystemMessageId;
 import com.l2jserver.gameserver.network.serverpackets.SystemMessage;
@@ -48,7 +47,9 @@ public final class BuffInfo
 {
 	// Data
 	/** Data. */
-	private final Env _env;
+	private final L2Character _effector;
+	private final L2Character _effected;
+	private final Skill _skill;
 	/** The effects. */
 	private final List<AbstractEffect> _effects = new ArrayList<>(1);
 	// Tasks
@@ -71,12 +72,16 @@ public final class BuffInfo
 	
 	/**
 	 * Buff Info constructor.
-	 * @param env the cast data
+	 * @param effector
+	 * @param effected
+	 * @param skill
 	 */
-	public BuffInfo(Env env)
+	public BuffInfo(L2Character effector, L2Character effected, Skill skill)
 	{
-		_env = env;
-		_abnormalTime = Formulas.calcEffectAbnormalTime(env);
+		_effector = effector;
+		_effected = effected;
+		_skill = skill;
+		_abnormalTime = Formulas.calcEffectAbnormalTime(effector, effected, skill);
 		_periodStartTicks = GameTimeController.getInstance().getGameTicks();
 	}
 	
@@ -135,12 +140,7 @@ public final class BuffInfo
 	 */
 	public Skill getSkill()
 	{
-		return _env.getSkill();
-	}
-	
-	public Env getEnv()
-	{
-		return _env;
+		return _skill;
 	}
 	
 	/**
@@ -221,7 +221,7 @@ public final class BuffInfo
 	 */
 	public L2Character getEffector()
 	{
-		return _env.getCharacter();
+		return _effector;
 	}
 	
 	/**
@@ -230,7 +230,7 @@ public final class BuffInfo
 	 */
 	public L2Character getEffected()
 	{
-		return _env.getTarget();
+		return _effected;
 	}
 	
 	/**
@@ -258,11 +258,11 @@ public final class BuffInfo
 	public void initializeEffects()
 	{
 		// When effects are initialized, the successfully landed.
-		if (_env.getTarget().isPlayer() && !_env.getSkill().isPassive())
+		if (_effected.isPlayer() && !_skill.isPassive())
 		{
 			final SystemMessage sm = SystemMessage.getSystemMessage(SystemMessageId.YOU_FEEL_S1_EFFECT);
-			sm.addSkillName(_env.getSkill());
-			_env.getTarget().sendPacket(sm);
+			sm.addSkillName(_skill);
+			_effected.sendPacket(sm);
 		}
 		
 		// Creates a task that will stop all the effects.
@@ -295,7 +295,7 @@ public final class BuffInfo
 			}
 			
 			// Add stats.
-			_env.getTarget().addStatFuncs(effect.getStatFuncs(_env));
+			_effected.addStatFuncs(effect.getStatFuncs(_effector, _effected, _skill));
 		}
 	}
 	
@@ -315,13 +315,13 @@ public final class BuffInfo
 			continueForever = effect.onActionTime(this);
 		}
 		
-		if (!continueForever && _env.getSkill().isToggle())
+		if (!continueForever && _skill.isToggle())
 		{
 			final EffectTaskInfo task = getEffectTask(effect);
 			if (task != null)
 			{
 				task.getScheduledFuture().cancel(true); // Allow to finish current run.
-				_env.getTarget().getEffectList().remove(true, this); // Remove the buff from the effect list.
+				_effected.getEffectList().remove(true, this); // Remove the buff from the effect list.
 			}
 		}
 	}
@@ -350,9 +350,9 @@ public final class BuffInfo
 		
 		// Sends the proper system message.
 		SystemMessageId smId = null;
-		if (!(_env.getTarget().isSummon() && !((L2Summon) _env.getTarget()).getOwner().hasSummon()))
+		if (!(_effected.isSummon() && !((L2Summon) _effected).getOwner().hasSummon()))
 		{
-			if (_env.getSkill().isToggle())
+			if (_skill.isToggle())
 			{
 				smId = SystemMessageId.S1_HAS_BEEN_ABORTED;
 			}
@@ -360,7 +360,7 @@ public final class BuffInfo
 			{
 				smId = SystemMessageId.EFFECT_S1_HAS_BEEN_REMOVED;
 			}
-			else if (!_env.getSkill().isPassive())
+			else if (!_skill.isPassive())
 			{
 				smId = SystemMessageId.S1_HAS_WORN_OFF;
 			}
@@ -369,13 +369,13 @@ public final class BuffInfo
 		if (smId != null)
 		{
 			final SystemMessage sm = SystemMessage.getSystemMessage(smId);
-			sm.addSkillName(_env.getSkill());
-			_env.getTarget().sendPacket(sm);
+			sm.addSkillName(_skill);
+			_effected.sendPacket(sm);
 		}
 		
-		if (this == _env.getTarget().getEffectList().getShortBuff())
+		if (this == _effected.getEffectList().getShortBuff())
 		{
-			_env.getTarget().getEffectList().shortBuffStatusUpdate(null);
+			_effected.getEffectList().shortBuffStatusUpdate(null);
 		}
 	}
 	
@@ -385,27 +385,27 @@ public final class BuffInfo
 	 */
 	private void applyAbnormalVisualEffects()
 	{
-		if ((_env.getTarget() == null) || (_env.getSkill() == null))
+		if ((_effected == null) || (_skill == null))
 		{
 			return;
 		}
 		
-		if (_env.getSkill().hasAbnormalVisualEffects())
+		if (_skill.hasAbnormalVisualEffects())
 		{
-			_env.getTarget().startAbnormalVisualEffect(false, _env.getSkill().getAbnormalVisualEffects());
+			_effected.startAbnormalVisualEffect(false, _skill.getAbnormalVisualEffects());
 		}
 		
-		if (_env.getTarget().isPlayer() && _env.getSkill().hasAbnormalVisualEffectsEvent())
+		if (_effected.isPlayer() && _skill.hasAbnormalVisualEffectsEvent())
 		{
-			_env.getTarget().startAbnormalVisualEffect(false, _env.getSkill().getAbnormalVisualEffectsEvent());
+			_effected.startAbnormalVisualEffect(false, _skill.getAbnormalVisualEffectsEvent());
 		}
 		
-		if (_env.getSkill().hasAbnormalVisualEffectsSpecial())
+		if (_skill.hasAbnormalVisualEffectsSpecial())
 		{
-			_env.getTarget().startAbnormalVisualEffect(false, _env.getSkill().getAbnormalVisualEffectsSpecial());
+			_effected.startAbnormalVisualEffect(false, _skill.getAbnormalVisualEffectsSpecial());
 		}
 		
-		_env.getTarget().updateAbnormalEffect();
+		_effected.updateAbnormalEffect();
 	}
 	
 	/**
@@ -414,27 +414,27 @@ public final class BuffInfo
 	 */
 	private void removeAbnormalVisualEffects()
 	{
-		if ((_env.getTarget() == null) || (_env.getSkill() == null))
+		if ((_effected == null) || (_skill == null))
 		{
 			return;
 		}
 		
-		if (_env.getSkill().hasAbnormalVisualEffects())
+		if (_skill.hasAbnormalVisualEffects())
 		{
-			_env.getTarget().stopAbnormalVisualEffect(false, _env.getSkill().getAbnormalVisualEffects());
+			_effected.stopAbnormalVisualEffect(false, _skill.getAbnormalVisualEffects());
 		}
 		
-		if (_env.getTarget().isPlayer() && _env.getSkill().hasAbnormalVisualEffectsEvent())
+		if (_effected.isPlayer() && _skill.hasAbnormalVisualEffectsEvent())
 		{
-			_env.getTarget().stopAbnormalVisualEffect(false, _env.getSkill().getAbnormalVisualEffectsEvent());
+			_effected.stopAbnormalVisualEffect(false, _skill.getAbnormalVisualEffectsEvent());
 		}
 		
-		if (_env.getSkill().hasAbnormalVisualEffectsSpecial())
+		if (_skill.hasAbnormalVisualEffectsSpecial())
 		{
-			_env.getTarget().stopAbnormalVisualEffect(false, _env.getSkill().getAbnormalVisualEffectsSpecial());
+			_effected.stopAbnormalVisualEffect(false, _skill.getAbnormalVisualEffectsSpecial());
 		}
 		
-		_env.getTarget().updateAbnormalEffect();
+		_effected.updateAbnormalEffect();
 	}
 	
 	/**
@@ -444,7 +444,7 @@ public final class BuffInfo
 	{
 		for (AbstractEffect effect : _effects)
 		{
-			_env.getTarget().addStatFuncs(effect.getStatFuncs(_env));
+			_effected.addStatFuncs(effect.getStatFuncs(_effector, _effected, _skill));
 		}
 	}
 	
@@ -455,9 +455,9 @@ public final class BuffInfo
 	{
 		for (AbstractEffect effect : _effects)
 		{
-			_env.getTarget().removeStatsOwner(effect);
+			_effected.removeStatsOwner(effect);
 		}
-		_env.getTarget().removeStatsOwner(_env.getSkill());
+		_effected.removeStatsOwner(_skill);
 	}
 	
 	/**

+ 16 - 40
L2J_Server/java/com/l2jserver/gameserver/model/skills/Skill.java

@@ -55,13 +55,12 @@ import com.l2jserver.gameserver.model.effects.L2EffectType;
 import com.l2jserver.gameserver.model.entity.TvTEvent;
 import com.l2jserver.gameserver.model.holders.ItemHolder;
 import com.l2jserver.gameserver.model.interfaces.IIdentifiable;
-import com.l2jserver.gameserver.model.skills.funcs.Func;
-import com.l2jserver.gameserver.model.skills.funcs.FuncTemplate;
 import com.l2jserver.gameserver.model.skills.targets.L2TargetType;
 import com.l2jserver.gameserver.model.stats.BaseStats;
-import com.l2jserver.gameserver.model.stats.Env;
 import com.l2jserver.gameserver.model.stats.Formulas;
 import com.l2jserver.gameserver.model.stats.TraitType;
+import com.l2jserver.gameserver.model.stats.functions.AbstractFunction;
+import com.l2jserver.gameserver.model.stats.functions.FuncTemplate;
 import com.l2jserver.gameserver.model.zone.ZoneId;
 import com.l2jserver.gameserver.network.serverpackets.FlyToLocation.FlyType;
 import com.l2jserver.gameserver.network.serverpackets.SystemMessage;
@@ -985,7 +984,7 @@ public final class Skill implements IIdentifiable
 		return _effectPoint < 0;
 	}
 	
-	public boolean checkCondition(L2Character activeChar, L2Object target, boolean itemOrWeapon)
+	public boolean checkCondition(L2Character activeChar, L2Object object, boolean itemOrWeapon)
 	{
 		if (activeChar.canOverrideCond(PcCondOverride.SKILL_CONDITIONS) && !Config.GM_SKILL_RESTRICTION)
 		{
@@ -998,17 +997,10 @@ public final class Skill implements IIdentifiable
 			return true;
 		}
 		
-		final Env env = new Env();
-		env.setCharacter(activeChar);
-		if (target instanceof L2Character)
-		{
-			env.setTarget((L2Character) target);
-		}
-		env.setSkill(this);
-		
+		final L2Character target = (object instanceof L2Character) ? (L2Character) object : null;
 		for (Condition cond : preCondition)
 		{
-			if (!cond.test(env))
+			if (!cond.test(activeChar, target, this))
 			{
 				final String msg = cond.getMessage();
 				final int msgId = cond.getMessageId();
@@ -1222,25 +1214,22 @@ public final class Skill implements IIdentifiable
 		return true;
 	}
 	
-	public List<Func> getStatFuncs(AbstractEffect effect, L2Character player)
+	public List<AbstractFunction> getStatFuncs(AbstractEffect effect, L2Character player)
 	{
 		if (_funcTemplates == null)
 		{
-			return Collections.<Func> emptyList();
+			return Collections.<AbstractFunction> emptyList();
 		}
 		
 		if (!(player instanceof L2Playable) && !(player instanceof L2Attackable))
 		{
-			return Collections.<Func> emptyList();
+			return Collections.<AbstractFunction> emptyList();
 		}
 		
-		final List<Func> funcs = new ArrayList<>(_funcTemplates.size());
-		final Env env = new Env();
-		env.setCharacter(player);
-		env.setSkill(this);
+		final List<AbstractFunction> funcs = new ArrayList<>(_funcTemplates.size());
 		for (FuncTemplate t : _funcTemplates)
 		{
-			Func f = t.getFunc(env, this); // skill is owner
+			AbstractFunction f = t.getFunc(player, null, this, this); // skill is owner
 			if (f != null)
 			{
 				funcs.add(f);
@@ -1358,16 +1347,10 @@ public final class Skill implements IIdentifiable
 			return;
 		}
 		
-		final Env env = new Env();
-		env.setSkillMastery(Formulas.calcSkillMastery(effector, this));
-		env.setCharacter(effector);
-		env.setCubic(cubic);
-		env.setTarget(effected);
-		env.setSkill(this);
-		boolean addContinuousEffects = !passive && (_operateType.isToggle() || (_operateType.isContinuous() && Formulas.calcEffectSuccess(env)));
+		boolean addContinuousEffects = !passive && (_operateType.isToggle() || (_operateType.isContinuous() && Formulas.calcEffectSuccess(effector, effected, this)));
 		if (!self && !passive)
 		{
-			final BuffInfo info = new BuffInfo(env);
+			final BuffInfo info = new BuffInfo(effector, effected, this);
 			if (addContinuousEffects && (abnormalTime > 0))
 			{
 				info.setAbnormalTime(abnormalTime);
@@ -1397,10 +1380,9 @@ public final class Skill implements IIdentifiable
 		
 		if (self)
 		{
-			addContinuousEffects = !passive && (_operateType.isToggle() || ((_operateType.isContinuous() || _operateType.isSelfContinuous()) && Formulas.calcEffectSuccess(env)));
+			addContinuousEffects = !passive && (_operateType.isToggle() || ((_operateType.isContinuous() || _operateType.isSelfContinuous()) && Formulas.calcEffectSuccess(effector, effector, this)));
 			
-			env.setTarget(effector);
-			final BuffInfo info = new BuffInfo(env);
+			final BuffInfo info = new BuffInfo(effector, effector, this);
 			if (addContinuousEffects && (abnormalTime > 0))
 			{
 				info.setAbnormalTime(abnormalTime);
@@ -1424,8 +1406,7 @@ public final class Skill implements IIdentifiable
 		
 		if (passive)
 		{
-			env.setTarget(effector);
-			final BuffInfo info = new BuffInfo(env);
+			final BuffInfo info = new BuffInfo(effector, effector, this);
 			applyEffectScope(EffectScope.PASSIVE, info, false, true);
 			effector.getEffectList().add(info);
 		}
@@ -1483,12 +1464,7 @@ public final class Skill implements IIdentifiable
 						// and continuous effects on caster
 						applyEffects(target, caster, false, 0);
 						
-						final Env env = new Env();
-						env.setCharacter(caster);
-						env.setTarget(target);
-						env.setSkill(this);
-						
-						final BuffInfo info = new BuffInfo(env);
+						final BuffInfo info = new BuffInfo(caster, target, this);
 						applyEffectScope(EffectScope.GENERAL, info, true, false);
 						
 						EffectScope pvpOrPveEffectScope = caster.isPlayable() && target.isAttackable() ? EffectScope.PVE : caster.isPlayable() && target.isPlayable() ? EffectScope.PVP : null;

+ 0 - 92
L2J_Server/java/com/l2jserver/gameserver/model/skills/funcs/Func.java

@@ -1,92 +0,0 @@
-/*
- * 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.skills.funcs;
-
-import com.l2jserver.gameserver.model.conditions.Condition;
-import com.l2jserver.gameserver.model.stats.Env;
-import com.l2jserver.gameserver.model.stats.Stats;
-
-/**
- * A Func object is a component of a Calculator created to manage and dynamically calculate the effect of a character property (ex : MAX_HP, REGENERATE_HP_RATE...).<br>
- * In fact, each calculator is a table of Func object in which each Func represents a mathematics function:<br>
- * FuncAtkAccuracy -> Math.sqrt(_player.getDEX())*6+_player.getLevel()<br>
- * When the calc method of a calculator is launched, each mathematics function is called according to its priority <B>_order</B>.<br>
- * Indeed, Func with lowest priority order is executed first and Funcs with the same order are executed in unspecified order.<br>
- * The result of the calculation is stored in the value property of an Env class instance.
- */
-public abstract class Func
-{
-	/**
-	 * Statistics, that is affected by this function (See L2Character.CALCULATOR_XXX constants)
-	 */
-	public final Stats stat;
-	
-	/**
-	 * Order of functions calculation.<br>
-	 * Functions with lower order are executed first.<br>
-	 * Functions with the same order are executed in unspecified order.<br>
-	 * Usually add/subtract functions has lowest order,<br>
-	 * then bonus/penalty functions (multiply/divide) are applied, then functions that do more complex<br>
-	 * calculations (non-linear functions).
-	 */
-	public final int order;
-	
-	/**
-	 * Owner can be an armor, weapon, skill, system event, quest, etc.<br>
-	 * Used to remove all functions added by this owner.
-	 */
-	public final Object funcOwner;
-	
-	/**
-	 * Function may be disabled by attached condition.
-	 */
-	public Condition cond;
-	
-	public double _value;
-	
-	/**
-	 * Constructor of Func.
-	 * @param pStat
-	 * @param pOrder
-	 * @param owner
-	 * @param value
-	 */
-	public Func(Stats pStat, int pOrder, Object owner, double value)
-	{
-		stat = pStat;
-		order = pOrder;
-		funcOwner = owner;
-		_value = value;
-	}
-	
-	/**
-	 * Add a condition to the Func.
-	 * @param pCond
-	 */
-	public void setCondition(Condition pCond)
-	{
-		cond = pCond;
-	}
-	
-	/**
-	 * Run the mathematics function of the Func.
-	 * @param env
-	 */
-	public abstract void calc(Env env);
-}

Някои файлове не бяха показани, защото твърде много файлове са промени