Bläddra i källkod

BETA: Rework Trigger skills

 * Remove ChanceSkillList
 * Remove IChanceSkillTrigger
 * Remove ChanceCondition
 * Clean not used anymore variables from old triggers
 * Add new listener "OnCreatureAttackAvoid"
 * A lot skills fixed
 * Add new Effects
   * TriggerSkillByAvoid
   * TriggerSkillByAttack
   * TriggerSkillBySkill
Zealar 10 år sedan
förälder
incheckning
d9c64dae0b

+ 0 - 185
L2J_Server_BETA/java/com/l2jserver/gameserver/model/ChanceCondition.java

@@ -1,185 +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;
-
-import java.util.Arrays;
-import java.util.logging.Level;
-import java.util.logging.Logger;
-
-import com.l2jserver.gameserver.enums.TriggerType;
-import com.l2jserver.gameserver.model.skills.Skill;
-import com.l2jserver.util.Rnd;
-
-/**
- * @author kombat
- */
-public final class ChanceCondition
-{
-	private static final Logger _log = Logger.getLogger(ChanceCondition.class.getName());
-	
-	public static final int EVT_HIT = 1;
-	public static final int EVT_CRIT = 2;
-	public static final int EVT_CAST = 4;
-	public static final int EVT_PHYSICAL = 8;
-	public static final int EVT_MAGIC = 16;
-	public static final int EVT_MAGIC_GOOD = 32;
-	public static final int EVT_MAGIC_OFFENSIVE = 64;
-	public static final int EVT_ATTACKED = 128;
-	public static final int EVT_ATTACKED_HIT = 256;
-	public static final int EVT_ATTACKED_CRIT = 512;
-	public static final int EVT_HIT_BY_SKILL = 1024;
-	public static final int EVT_HIT_BY_OFFENSIVE_SKILL = 2048;
-	public static final int EVT_HIT_BY_GOOD_MAGIC = 4096;
-	public static final int EVT_EVADED_HIT = 8192;
-	public static final int EVT_ON_START = 16384;
-	public static final int EVT_ON_ACTION_TIME = 32768;
-	public static final int EVT_ON_EXIT = 65536;
-	
-	private final TriggerType _triggerType;
-	private final int _chance;
-	private final int _mindmg;
-	private final byte[] _elements;
-	private final int[] _activationSkills;
-	private final boolean _pvpOnly;
-	
-	private ChanceCondition(TriggerType trigger, int chance, int mindmg, byte[] elements, int[] activationSkills, boolean pvpOnly)
-	{
-		_triggerType = trigger;
-		_chance = chance;
-		_mindmg = mindmg;
-		_elements = elements;
-		_pvpOnly = pvpOnly;
-		_activationSkills = activationSkills;
-	}
-	
-	public static ChanceCondition parse(StatsSet set)
-	{
-		try
-		{
-			TriggerType trigger = set.getEnum("chanceType", TriggerType.class, null);
-			int chance = set.getInt("activationChance", -1);
-			int mindmg = set.getInt("activationMinDamage", -1);
-			String elements = set.getString("activationElements", null);
-			String activationSkills = set.getString("activationSkills", null);
-			boolean pvpOnly = set.getBoolean("pvpChanceOnly", false);
-			
-			if (trigger != null)
-			{
-				return new ChanceCondition(trigger, chance, mindmg, parseElements(elements), parseActivationSkills(activationSkills), pvpOnly);
-			}
-		}
-		catch (Exception e)
-		{
-			_log.log(Level.WARNING, "", e);
-		}
-		return null;
-	}
-	
-	public static ChanceCondition parse(String chanceType, int chance, int mindmg, String elements, String activationSkills, boolean pvpOnly)
-	{
-		try
-		{
-			if (chanceType == null)
-			{
-				return null;
-			}
-			
-			TriggerType trigger = Enum.valueOf(TriggerType.class, chanceType);
-			
-			if (trigger != null)
-			{
-				return new ChanceCondition(trigger, chance, mindmg, parseElements(elements), parseActivationSkills(activationSkills), pvpOnly);
-			}
-		}
-		catch (Exception e)
-		{
-			_log.log(Level.WARNING, "", e);
-		}
-		
-		return null;
-	}
-	
-	public static final byte[] parseElements(String list)
-	{
-		if (list == null)
-		{
-			return null;
-		}
-		
-		String[] valuesSplit = list.split(",");
-		byte[] elements = new byte[valuesSplit.length];
-		for (int i = 0; i < valuesSplit.length; i++)
-		{
-			elements[i] = Byte.parseByte(valuesSplit[i]);
-		}
-		
-		Arrays.sort(elements);
-		return elements;
-	}
-	
-	public static final int[] parseActivationSkills(String list)
-	{
-		if (list == null)
-		{
-			return null;
-		}
-		
-		String[] valuesSplit = list.split(",");
-		int[] skillIds = new int[valuesSplit.length];
-		for (int i = 0; i < valuesSplit.length; i++)
-		{
-			skillIds[i] = Integer.parseInt(valuesSplit[i]);
-		}
-		
-		return skillIds;
-	}
-	
-	public boolean trigger(int event, int damage, byte element, boolean playable, Skill skill)
-	{
-		if (_pvpOnly && !playable)
-		{
-			return false;
-		}
-		
-		if ((_elements != null) && (Arrays.binarySearch(_elements, element) < 0))
-		{
-			return false;
-		}
-		
-		if ((_activationSkills != null) && (skill != null) && (Arrays.binarySearch(_activationSkills, skill.getId()) < 0))
-		{
-			return false;
-		}
-		
-		// if the skill has "activationMinDamage" setted to higher than -1(default)
-		// and if "activationMinDamage" is still higher than the recieved damage, the skill wont trigger
-		if ((_mindmg > -1) && (_mindmg > damage))
-		{
-			return false;
-		}
-		
-		return _triggerType.check(event) && ((_chance < 0) || (Rnd.get(100) < _chance));
-	}
-	
-	@Override
-	public String toString()
-	{
-		return "Trigger[" + _chance + ";" + _triggerType.toString() + "]";
-	}
-}

+ 0 - 193
L2J_Server_BETA/java/com/l2jserver/gameserver/model/ChanceSkillList.java

@@ -1,193 +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;
-
-import java.util.logging.Level;
-import java.util.logging.Logger;
-
-import javolution.util.FastMap;
-
-import com.l2jserver.gameserver.datatables.SkillData;
-import com.l2jserver.gameserver.model.actor.L2Character;
-import com.l2jserver.gameserver.model.actor.L2Playable;
-import com.l2jserver.gameserver.model.effects.AbstractEffect;
-import com.l2jserver.gameserver.model.interfaces.IChanceSkillTrigger;
-import com.l2jserver.gameserver.model.skills.Skill;
-import com.l2jserver.gameserver.network.serverpackets.MagicSkillLaunched;
-import com.l2jserver.gameserver.network.serverpackets.MagicSkillUse;
-
-/**
- * CT2.3: Added support for allowing effect as a chance skill trigger (DrHouse)
- * @author kombat
- */
-public class ChanceSkillList extends FastMap<IChanceSkillTrigger, ChanceCondition>
-{
-	protected static final Logger _log = Logger.getLogger(ChanceSkillList.class.getName());
-	private static final long serialVersionUID = 1L;
-	
-	private final L2Character _owner;
-	
-	public ChanceSkillList(L2Character owner)
-	{
-		shared();
-		_owner = owner;
-	}
-	
-	public L2Character getOwner()
-	{
-		return _owner;
-	}
-	
-	public void onHit(L2Character target, int damage, boolean ownerWasHit, boolean wasCrit)
-	{
-		int event;
-		if (ownerWasHit)
-		{
-			event = ChanceCondition.EVT_ATTACKED | ChanceCondition.EVT_ATTACKED_HIT;
-			if (wasCrit)
-			{
-				event |= ChanceCondition.EVT_ATTACKED_CRIT;
-			}
-		}
-		else
-		{
-			event = ChanceCondition.EVT_HIT;
-			if (wasCrit)
-			{
-				event |= ChanceCondition.EVT_CRIT;
-			}
-		}
-		
-		onEvent(event, damage, target, null, Elementals.NONE);
-	}
-	
-	public void onEvadedHit(L2Character attacker)
-	{
-		onEvent(ChanceCondition.EVT_EVADED_HIT, 0, attacker, null, Elementals.NONE);
-	}
-	
-	public void onSkillHit(L2Character target, Skill skill, boolean ownerWasHit)
-	{
-		int event;
-		if (ownerWasHit)
-		{
-			event = ChanceCondition.EVT_HIT_BY_SKILL;
-			if (skill.isBad())
-			{
-				event |= ChanceCondition.EVT_HIT_BY_OFFENSIVE_SKILL;
-				event |= ChanceCondition.EVT_ATTACKED;
-				event |= ChanceCondition.EVT_ATTACKED_HIT;
-			}
-			else
-			{
-				event |= ChanceCondition.EVT_HIT_BY_GOOD_MAGIC;
-			}
-		}
-		else
-		{
-			event = ChanceCondition.EVT_CAST;
-			event |= skill.isMagic() ? ChanceCondition.EVT_MAGIC : ChanceCondition.EVT_PHYSICAL;
-			event |= skill.isBad() ? ChanceCondition.EVT_MAGIC_OFFENSIVE : ChanceCondition.EVT_MAGIC_GOOD;
-		}
-		
-		onEvent(event, 0, target, skill, skill.getElement());
-	}
-	
-	public void onStart(byte element)
-	{
-		onEvent(ChanceCondition.EVT_ON_START, 0, _owner, null, element);
-	}
-	
-	public void onActionTime(byte element)
-	{
-		onEvent(ChanceCondition.EVT_ON_ACTION_TIME, 0, _owner, null, element);
-	}
-	
-	public void onExit(byte element)
-	{
-		onEvent(ChanceCondition.EVT_ON_EXIT, 0, _owner, null, element);
-	}
-	
-	public void onEvent(int event, int damage, L2Character target, Skill skill, byte element)
-	{
-		if (_owner.isDead())
-		{
-			return;
-		}
-		
-		final boolean playable = target instanceof L2Playable;
-		for (FastMap.Entry<IChanceSkillTrigger, ChanceCondition> e = head(), end = tail(); (e = e.getNext()) != end;)
-		{
-			if ((e.getValue() != null) && e.getValue().trigger(event, damage, element, playable, skill))
-			{
-				if (e.getKey() instanceof Skill)
-				{
-					_owner.makeTriggerCast((Skill) e.getKey(), target);
-				}
-				else
-				{
-					makeCast((AbstractEffect) e.getKey(), target);
-				}
-			}
-		}
-	}
-	
-	private void makeCast(AbstractEffect effect, L2Character target)
-	{
-		try
-		{
-			if ((effect == null) || !effect.triggersChanceSkill())
-			{
-				return;
-			}
-			
-			final Skill triggered = SkillData.getInstance().getSkill(effect.getTriggeredChanceId(), effect.getTriggeredChanceLevel());
-			if (triggered == null)
-			{
-				return;
-			}
-			
-			if ((_owner == null) || _owner.isSkillDisabled(triggered))
-			{
-				return;
-			}
-			
-			if (triggered.getReuseDelay() > 0)
-			{
-				_owner.disableSkill(triggered, triggered.getReuseDelay());
-			}
-			
-			final L2Object[] targets = triggered.getTargetList(_owner, false, target);
-			if (targets.length == 0)
-			{
-				return;
-			}
-			
-			_owner.broadcastPacket(new MagicSkillLaunched(_owner, triggered.getDisplayId(), triggered.getDisplayLevel(), targets));
-			_owner.broadcastPacket(new MagicSkillUse(_owner, target, triggered.getDisplayId(), triggered.getDisplayLevel(), 0, 0));
-			
-			// Launch the magic skill and calculate its effects
-			triggered.activateSkill(_owner, targets);
-		}
-		catch (Exception e)
-		{
-			_log.log(Level.WARNING, "", e);
-		}
-	}
-}

+ 18 - 165
L2J_Server_BETA/java/com/l2jserver/gameserver/model/actor/L2Character.java

@@ -50,7 +50,6 @@ import com.l2jserver.gameserver.ai.L2CharacterAI;
 import com.l2jserver.gameserver.datatables.CategoryData;
 import com.l2jserver.gameserver.datatables.CategoryData;
 import com.l2jserver.gameserver.datatables.DoorTable;
 import com.l2jserver.gameserver.datatables.DoorTable;
 import com.l2jserver.gameserver.datatables.ItemTable;
 import com.l2jserver.gameserver.datatables.ItemTable;
-import com.l2jserver.gameserver.datatables.SkillData;
 import com.l2jserver.gameserver.enums.CategoryType;
 import com.l2jserver.gameserver.enums.CategoryType;
 import com.l2jserver.gameserver.enums.InstanceType;
 import com.l2jserver.gameserver.enums.InstanceType;
 import com.l2jserver.gameserver.enums.Race;
 import com.l2jserver.gameserver.enums.Race;
@@ -61,7 +60,6 @@ import com.l2jserver.gameserver.instancemanager.InstanceManager;
 import com.l2jserver.gameserver.instancemanager.MapRegionManager;
 import com.l2jserver.gameserver.instancemanager.MapRegionManager;
 import com.l2jserver.gameserver.instancemanager.TerritoryWarManager;
 import com.l2jserver.gameserver.instancemanager.TerritoryWarManager;
 import com.l2jserver.gameserver.instancemanager.TownManager;
 import com.l2jserver.gameserver.instancemanager.TownManager;
-import com.l2jserver.gameserver.model.ChanceSkillList;
 import com.l2jserver.gameserver.model.CharEffectList;
 import com.l2jserver.gameserver.model.CharEffectList;
 import com.l2jserver.gameserver.model.L2AccessLevel;
 import com.l2jserver.gameserver.model.L2AccessLevel;
 import com.l2jserver.gameserver.model.L2Object;
 import com.l2jserver.gameserver.model.L2Object;
@@ -94,6 +92,7 @@ import com.l2jserver.gameserver.model.events.Containers;
 import com.l2jserver.gameserver.model.events.EventDispatcher;
 import com.l2jserver.gameserver.model.events.EventDispatcher;
 import com.l2jserver.gameserver.model.events.EventType;
 import com.l2jserver.gameserver.model.events.EventType;
 import com.l2jserver.gameserver.model.events.impl.character.OnCreatureAttack;
 import com.l2jserver.gameserver.model.events.impl.character.OnCreatureAttack;
+import com.l2jserver.gameserver.model.events.impl.character.OnCreatureAttackAvoid;
 import com.l2jserver.gameserver.model.events.impl.character.OnCreatureAttacked;
 import com.l2jserver.gameserver.model.events.impl.character.OnCreatureAttacked;
 import com.l2jserver.gameserver.model.events.impl.character.OnCreatureDamageDealt;
 import com.l2jserver.gameserver.model.events.impl.character.OnCreatureDamageDealt;
 import com.l2jserver.gameserver.model.events.impl.character.OnCreatureDamageReceived;
 import com.l2jserver.gameserver.model.events.impl.character.OnCreatureDamageReceived;
@@ -106,7 +105,6 @@ import com.l2jserver.gameserver.model.events.returns.TerminateReturn;
 import com.l2jserver.gameserver.model.holders.InvulSkillHolder;
 import com.l2jserver.gameserver.model.holders.InvulSkillHolder;
 import com.l2jserver.gameserver.model.holders.SkillHolder;
 import com.l2jserver.gameserver.model.holders.SkillHolder;
 import com.l2jserver.gameserver.model.holders.SkillUseHolder;
 import com.l2jserver.gameserver.model.holders.SkillUseHolder;
-import com.l2jserver.gameserver.model.interfaces.IChanceSkillTrigger;
 import com.l2jserver.gameserver.model.interfaces.IDeletable;
 import com.l2jserver.gameserver.model.interfaces.IDeletable;
 import com.l2jserver.gameserver.model.interfaces.ILocational;
 import com.l2jserver.gameserver.model.interfaces.ILocational;
 import com.l2jserver.gameserver.model.interfaces.ISkillsHolder;
 import com.l2jserver.gameserver.model.interfaces.ISkillsHolder;
@@ -225,8 +223,6 @@ public abstract class L2Character extends L2Object implements ISkillsHolder, IDe
 	/** Map containing all the disabled skills. */
 	/** Map containing all the disabled skills. */
 	private volatile Map<Integer, Long> _disabledSkills = null;
 	private volatile Map<Integer, Long> _disabledSkills = null;
 	private boolean _allSkillsDisabled;
 	private boolean _allSkillsDisabled;
-	/** Map containing the active chance skills on this character */
-	private volatile ChanceSkillList _chanceSkills;
 	
 	
 	private final byte[] _zones = new byte[ZoneId.getZoneCount()];
 	private final byte[] _zones = new byte[ZoneId.getZoneCount()];
 	protected byte _zoneValidateCounter = 4;
 	protected byte _zoneValidateCounter = 4;
@@ -4922,12 +4918,7 @@ public abstract class L2Character extends L2Object implements ISkillsHolder, IDe
 			{
 			{
 				target.getAI().notifyEvent(CtrlEvent.EVT_EVADED, this);
 				target.getAI().notifyEvent(CtrlEvent.EVT_EVADED, this);
 			}
 			}
-			
-			// ON_EVADED_HIT
-			if (target.getChanceSkills() != null)
-			{
-				target.getChanceSkills().onEvadedHit(this);
-			}
+			notifyAttackAvoid(target, false);
 		}
 		}
 		
 		
 		// Send message about damage/crit or miss
 		// Send message about damage/crit or miss
@@ -5065,17 +5056,6 @@ public abstract class L2Character extends L2Object implements ISkillsHolder, IDe
 				target.breakCast();
 				target.breakCast();
 			}
 			}
 			
 			
-			// Maybe launch chance skills on us
-			if (_chanceSkills != null)
-			{
-				_chanceSkills.onHit(target, damage, false, crit);
-				// Reflect triggers onHit
-				if (reflectedDamage > 0)
-				{
-					_chanceSkills.onHit(target, reflectedDamage, true, false);
-				}
-			}
-			
 			if (_triggerSkills != null)
 			if (_triggerSkills != null)
 			{
 			{
 				for (OptionsSkillHolder holder : _triggerSkills.values())
 				for (OptionsSkillHolder holder : _triggerSkills.values())
@@ -5089,19 +5069,13 @@ public abstract class L2Character extends L2Object implements ISkillsHolder, IDe
 					}
 					}
 				}
 				}
 			}
 			}
-			
-			// Maybe launch chance skills on target
-			if (target.getChanceSkills() != null)
-			{
-				target.getChanceSkills().onHit(this, damage, true, crit);
-			}
 		}
 		}
 		
 		
 		// Launch weapon Special ability effect if available
 		// Launch weapon Special ability effect if available
 		L2Weapon activeWeapon = getActiveWeaponItem();
 		L2Weapon activeWeapon = getActiveWeaponItem();
 		if (activeWeapon != null)
 		if (activeWeapon != null)
 		{
 		{
-			activeWeapon.getSkillEffects(this, target, crit);
+			activeWeapon.castOnCriticalSkill(this, target);
 		}
 		}
 		
 		
 		// Recharge any active auto-soulshot tasks for current creature.
 		// Recharge any active auto-soulshot tasks for current creature.
@@ -5391,25 +5365,11 @@ public abstract class L2Character extends L2Object implements ISkillsHolder, IDe
 			// If an old skill has been replaced, remove all its Func objects
 			// If an old skill has been replaced, remove all its Func objects
 			if (oldSkill != null)
 			if (oldSkill != null)
 			{
 			{
-				// if skill came with another one, we should delete the other one too.
-				if ((oldSkill.triggerAnotherSkill()))
-				{
-					removeSkill(oldSkill.getTriggeredId(), true);
-				}
 				removeStatsOwner(oldSkill);
 				removeStatsOwner(oldSkill);
 			}
 			}
 			// Add Func objects of newSkill to the calculator set of the L2Character
 			// Add Func objects of newSkill to the calculator set of the L2Character
 			addStatFuncs(newSkill.getStatFuncs(null, this));
 			addStatFuncs(newSkill.getStatFuncs(null, this));
 			
 			
-			if ((oldSkill != null) && (_chanceSkills != null))
-			{
-				removeChanceSkill(oldSkill.getId());
-			}
-			if (newSkill.isChance())
-			{
-				addChanceTrigger(newSkill);
-			}
-			
 			if (newSkill.isPassive())
 			if (newSkill.isPassive())
 			{
 			{
 				newSkill.applyEffects(this, null, this, false, true, false, 0);
 				newSkill.applyEffects(this, null, this, false, true, false, 0);
@@ -5435,11 +5395,6 @@ public abstract class L2Character extends L2Object implements ISkillsHolder, IDe
 		// Remove all its Func objects from the L2Character calculator set
 		// Remove all its Func objects from the L2Character calculator set
 		if (oldSkill != null)
 		if (oldSkill != null)
 		{
 		{
-			// this is just a fail-safe againts buggers and gm dummies...
-			if ((oldSkill.triggerAnotherSkill()) && (oldSkill.getTriggeredId() > 0))
-			{
-				removeSkill(oldSkill.getTriggeredId(), true);
-			}
 			
 			
 			// Stop casting if this skill is used right now
 			// Stop casting if this skill is used right now
 			if ((getLastSkillCast() != null) && isCastingNow())
 			if ((getLastSkillCast() != null) && isCastingNow())
@@ -5463,92 +5418,11 @@ public abstract class L2Character extends L2Object implements ISkillsHolder, IDe
 				removeStatsOwner(oldSkill);
 				removeStatsOwner(oldSkill);
 				stopSkillEffects(true, oldSkill.getId());
 				stopSkillEffects(true, oldSkill.getId());
 			}
 			}
-			
-			if (oldSkill.isChance() && (_chanceSkills != null))
-			{
-				removeChanceSkill(oldSkill.getId());
-			}
 		}
 		}
 		
 		
 		return oldSkill;
 		return oldSkill;
 	}
 	}
 	
 	
-	public void removeChanceSkill(int id)
-	{
-		if (_chanceSkills == null)
-		{
-			return;
-		}
-		synchronized (_chanceSkills)
-		{
-			for (IChanceSkillTrigger trigger : _chanceSkills.keySet())
-			{
-				if (!(trigger instanceof Skill))
-				{
-					continue;
-				}
-				if (((Skill) trigger).getId() == id)
-				{
-					_chanceSkills.remove(trigger);
-				}
-			}
-		}
-	}
-	
-	public void addChanceTrigger(IChanceSkillTrigger trigger)
-	{
-		if (_chanceSkills == null)
-		{
-			synchronized (this)
-			{
-				if (_chanceSkills == null)
-				{
-					_chanceSkills = new ChanceSkillList(this);
-				}
-			}
-		}
-		_chanceSkills.put(trigger, trigger.getTriggeredChanceCondition());
-	}
-	
-	public void removeChanceEffect(IChanceSkillTrigger effect)
-	{
-		if (_chanceSkills == null)
-		{
-			return;
-		}
-		_chanceSkills.remove(effect);
-	}
-	
-	public void onStartChanceEffect(byte element)
-	{
-		if (_chanceSkills == null)
-		{
-			return;
-		}
-		
-		_chanceSkills.onStart(element);
-	}
-	
-	public void onActionTimeChanceEffect(byte element)
-	{
-		if (_chanceSkills == null)
-		{
-			return;
-		}
-		
-		_chanceSkills.onActionTime(element);
-	}
-	
-	public void onExitChanceEffect(byte element)
-	{
-		if (_chanceSkills == null)
-		{
-			return;
-		}
-		
-		_chanceSkills.onExit(element);
-	}
-	
 	/**
 	/**
 	 * <B><U>Concept</U>:</B><br>
 	 * <B><U>Concept</U>:</B><br>
 	 * All skills own by a L2Character are identified in <B>_skills</B> the L2Character
 	 * All skills own by a L2Character are identified in <B>_skills</B> the L2Character
@@ -5568,11 +5442,6 @@ public abstract class L2Character extends L2Object implements ISkillsHolder, IDe
 		return _skills;
 		return _skills;
 	}
 	}
 	
 	
-	public ChanceSkillList getChanceSkills()
-	{
-		return _chanceSkills;
-	}
-	
 	/**
 	/**
 	 * Return the level of a skill owned by the L2Character.
 	 * Return the level of a skill owned by the L2Character.
 	 * @param skillId The identifier of the L2Skill whose level must be returned
 	 * @param skillId The identifier of the L2Skill whose level must be returned
@@ -6031,23 +5900,7 @@ public abstract class L2Character extends L2Object implements ISkillsHolder, IDe
 					// Launch weapon Special ability skill effect if available
 					// Launch weapon Special ability skill effect if available
 					if ((activeWeapon != null) && !target.isDead())
 					if ((activeWeapon != null) && !target.isDead())
 					{
 					{
-						if (activeWeapon.getSkillEffects(this, target, skill) && isPlayer())
-						{
-							SystemMessage sm = SystemMessage.getSystemMessage(SystemMessageId.S1_HAS_BEEN_ACTIVATED);
-							sm.addSkillName(skill);
-							sendPacket(sm);
-						}
-					}
-					
-					// Maybe launch chance skills on us
-					if (_chanceSkills != null)
-					{
-						_chanceSkills.onSkillHit(target, skill, false);
-					}
-					// Maybe launch chance skills on target
-					if (target.getChanceSkills() != null)
-					{
-						target.getChanceSkills().onSkillHit(this, skill, true);
+						activeWeapon.castOnMagicSkill(this, target, skill);
 					}
 					}
 					
 					
 					if (_triggerSkills != null)
 					if (_triggerSkills != null)
@@ -6815,22 +6668,12 @@ public abstract class L2Character extends L2Object implements ISkillsHolder, IDe
 	{
 	{
 		try
 		try
 		{
 		{
+			if ((skill == null))
+			{
+				return;
+			}
 			if (skill.checkCondition(this, target, false))
 			if (skill.checkCondition(this, target, false))
 			{
 			{
-				if (skill.triggersChanceSkill()) // skill will trigger another skill, but only if its not chance skill
-				{
-					skill = SkillData.getInstance().getSkill(skill.getTriggeredChanceId(), skill.getTriggeredChanceLevel());
-					if ((skill == null))
-					{
-						return;
-					}
-					// We change skill to new one, we should verify conditions for new one
-					if (!skill.checkCondition(this, target, false))
-					{
-						return;
-					}
-				}
-				
 				if (isSkillDisabled(skill))
 				if (isSkillDisabled(skill))
 				{
 				{
 					return;
 					return;
@@ -6952,6 +6795,16 @@ public abstract class L2Character extends L2Object implements ISkillsHolder, IDe
 		EventDispatcher.getInstance().notifyEventAsync(new OnCreatureDamageDealt(attacker, this, damage, skill, critical, damageOverTime), attacker);
 		EventDispatcher.getInstance().notifyEventAsync(new OnCreatureDamageDealt(attacker, this, damage, skill, critical, damageOverTime), attacker);
 	}
 	}
 	
 	
+	/**
+	 * Notifies to listeners that current character avoid attack.
+	 * @param target
+	 * @param isDot
+	 */
+	public void notifyAttackAvoid(final L2Character target, final boolean isDot)
+	{
+		EventDispatcher.getInstance().notifyEventAsync(new OnCreatureAttackAvoid(this, target, isDot), target);
+	}
+	
 	/**
 	/**
 	 * @return {@link WeaponType} of current character's weapon or basic weapon type.
 	 * @return {@link WeaponType} of current character's weapon or basic weapon type.
 	 */
 	 */

+ 1 - 33
L2J_Server_BETA/java/com/l2jserver/gameserver/model/effects/AbstractEffect.java

@@ -27,10 +27,8 @@ import java.util.logging.Logger;
 
 
 import com.l2jserver.Config;
 import com.l2jserver.Config;
 import com.l2jserver.gameserver.handler.EffectHandler;
 import com.l2jserver.gameserver.handler.EffectHandler;
-import com.l2jserver.gameserver.model.ChanceCondition;
 import com.l2jserver.gameserver.model.StatsSet;
 import com.l2jserver.gameserver.model.StatsSet;
 import com.l2jserver.gameserver.model.conditions.Condition;
 import com.l2jserver.gameserver.model.conditions.Condition;
-import com.l2jserver.gameserver.model.interfaces.IChanceSkillTrigger;
 import com.l2jserver.gameserver.model.skills.BuffInfo;
 import com.l2jserver.gameserver.model.skills.BuffInfo;
 import com.l2jserver.gameserver.model.skills.funcs.Func;
 import com.l2jserver.gameserver.model.skills.funcs.Func;
 import com.l2jserver.gameserver.model.skills.funcs.FuncTemplate;
 import com.l2jserver.gameserver.model.skills.funcs.FuncTemplate;
@@ -44,7 +42,7 @@ import com.l2jserver.gameserver.model.stats.Env;
  * @since <a href="http://trac.l2jserver.com/changeset/6249">Changeset 6249</a> the "effect steal constructor" is deprecated.
  * @since <a href="http://trac.l2jserver.com/changeset/6249">Changeset 6249</a> the "effect steal constructor" is deprecated.
  * @author Zoey76
  * @author Zoey76
  */
  */
-public abstract class AbstractEffect implements IChanceSkillTrigger
+public abstract class AbstractEffect
 {
 {
 	protected static final Logger _log = Logger.getLogger(AbstractEffect.class.getName());
 	protected static final Logger _log = Logger.getLogger(AbstractEffect.class.getName());
 	
 	
@@ -58,9 +56,6 @@ public abstract class AbstractEffect implements IChanceSkillTrigger
 	private final String _name;
 	private final String _name;
 	/** Ticks. */
 	/** Ticks. */
 	private final int _ticks;
 	private final int _ticks;
-	private final int _triggeredId;
-	private final int _triggeredLevel;
-	private final ChanceCondition _chanceCondition;
 	
 	
 	/**
 	/**
 	 * Abstract effect constructor.
 	 * Abstract effect constructor.
@@ -75,9 +70,6 @@ public abstract class AbstractEffect implements IChanceSkillTrigger
 		// _applyCond = applyCond;
 		// _applyCond = applyCond;
 		_name = set.getString("name");
 		_name = set.getString("name");
 		_ticks = set.getInt("ticks", 0);
 		_ticks = set.getInt("ticks", 0);
-		_triggeredId = set.getInt("triggeredId", 0);
-		_triggeredLevel = set.getInt("triggeredLevel", 1);
-		_chanceCondition = ChanceCondition.parse(set.getString("chanceType", null), set.getInt("activationChance", -1), set.getInt("activationMinDamage", -1), set.getString("activationElements", null), set.getString("activationSkills", null), set.getBoolean("pvpChanceOnly", false));
 	}
 	}
 	
 	
 	/**
 	/**
@@ -171,24 +163,6 @@ public abstract class AbstractEffect implements IChanceSkillTrigger
 		return _funcTemplates;
 		return _funcTemplates;
 	}
 	}
 	
 	
-	@Override
-	public int getTriggeredChanceId()
-	{
-		return _triggeredId;
-	}
-	
-	@Override
-	public int getTriggeredChanceLevel()
-	{
-		return _triggeredLevel;
-	}
-	
-	@Override
-	public ChanceCondition getTriggeredChanceCondition()
-	{
-		return _chanceCondition;
-	}
-	
 	/**
 	/**
 	 * Calculates whether this effects land or not.<br>
 	 * Calculates whether this effects land or not.<br>
 	 * If it lands will be scheduled and added to the character effect list.<br>
 	 * If it lands will be scheduled and added to the character effect list.<br>
@@ -306,12 +280,6 @@ public abstract class AbstractEffect implements IChanceSkillTrigger
 		return true;
 		return true;
 	}
 	}
 	
 	
-	@Override
-	public boolean triggersChanceSkill()
-	{
-		return _triggeredId > 0;
-	}
-	
 	/**
 	/**
 	 * Verify if this effect is an instant effect.
 	 * Verify if this effect is an instant effect.
 	 * @return {@code true} if this effect is instant, {@code false} otherwise
 	 * @return {@code true} if this effect is instant, {@code false} otherwise

+ 2 - 0
L2J_Server_BETA/java/com/l2jserver/gameserver/model/events/EventType.java

@@ -20,6 +20,7 @@ package com.l2jserver.gameserver.model.events;
 
 
 import com.l2jserver.gameserver.model.events.impl.IBaseEvent;
 import com.l2jserver.gameserver.model.events.impl.IBaseEvent;
 import com.l2jserver.gameserver.model.events.impl.character.OnCreatureAttack;
 import com.l2jserver.gameserver.model.events.impl.character.OnCreatureAttack;
+import com.l2jserver.gameserver.model.events.impl.character.OnCreatureAttackAvoid;
 import com.l2jserver.gameserver.model.events.impl.character.OnCreatureAttacked;
 import com.l2jserver.gameserver.model.events.impl.character.OnCreatureAttacked;
 import com.l2jserver.gameserver.model.events.impl.character.OnCreatureDamageDealt;
 import com.l2jserver.gameserver.model.events.impl.character.OnCreatureDamageDealt;
 import com.l2jserver.gameserver.model.events.impl.character.OnCreatureDamageReceived;
 import com.l2jserver.gameserver.model.events.impl.character.OnCreatureDamageReceived;
@@ -125,6 +126,7 @@ public enum EventType
 	
 	
 	// Creature events
 	// Creature events
 	ON_CREATURE_ATTACK(OnCreatureAttack.class, void.class, TerminateReturn.class),
 	ON_CREATURE_ATTACK(OnCreatureAttack.class, void.class, TerminateReturn.class),
+	ON_CREATURE_ATTACK_AVOID(OnCreatureAttackAvoid.class, void.class, void.class),
 	ON_CREATURE_ATTACKED(OnCreatureAttacked.class, void.class, TerminateReturn.class),
 	ON_CREATURE_ATTACKED(OnCreatureAttacked.class, void.class, TerminateReturn.class),
 	ON_CREATURE_DAMAGE_RECEIVED(OnCreatureDamageReceived.class, void.class),
 	ON_CREATURE_DAMAGE_RECEIVED(OnCreatureDamageReceived.class, void.class),
 	ON_CREATURE_DAMAGE_DEALT(OnCreatureDamageDealt.class, void.class),
 	ON_CREATURE_DAMAGE_DEALT(OnCreatureDamageDealt.class, void.class),

+ 70 - 0
L2J_Server_BETA/java/com/l2jserver/gameserver/model/events/impl/character/OnCreatureAttackAvoid.java

@@ -0,0 +1,70 @@
+/*
+ * 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.events.impl.character;
+
+import com.l2jserver.gameserver.model.actor.L2Character;
+import com.l2jserver.gameserver.model.events.EventType;
+import com.l2jserver.gameserver.model.events.impl.IBaseEvent;
+
+/**
+ * An instantly executed event when L2Character attack miss L2Character.
+ * @author Zealar
+ */
+public class OnCreatureAttackAvoid implements IBaseEvent
+{
+	private final L2Character _attacker;
+	private final L2Character _target;
+	private final boolean _damageOverTime;
+	
+	/**
+	 * @param attacker who attack
+	 * @param target who avoid
+	 * @param isDot is dot damage
+	 */
+	public OnCreatureAttackAvoid(L2Character attacker, L2Character target, boolean isDot)
+	{
+		_attacker = attacker;
+		_target = target;
+		_damageOverTime = isDot;
+	}
+	
+	public final L2Character getAttacker()
+	{
+		return _attacker;
+	}
+	
+	public final L2Character getTarget()
+	{
+		return _target;
+	}
+	
+	/**
+	 * @return
+	 */
+	public boolean isDamageOverTime()
+	{
+		return _damageOverTime;
+	}
+	
+	@Override
+	public EventType getType()
+	{
+		return EventType.ON_CREATURE_ATTACK_AVOID;
+	}
+}

+ 0 - 53
L2J_Server_BETA/java/com/l2jserver/gameserver/model/interfaces/IChanceSkillTrigger.java

@@ -1,53 +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.interfaces;
-
-import com.l2jserver.gameserver.model.ChanceCondition;
-
-/**
- * This interface provides method to handle triggered skills from other objects.<br>
- * For example, other skill, an effect, etc...
- * @author DrHouse
- */
-public interface IChanceSkillTrigger
-{
-	/**
-	 * Just a flag
-	 * @return
-	 */
-	public boolean triggersChanceSkill();
-	
-	/**
-	 * Triggered Id
-	 * @return
-	 */
-	public int getTriggeredChanceId();
-	
-	/**
-	 * Triggered level
-	 * @return
-	 */
-	public int getTriggeredChanceLevel();
-	
-	/**
-	 * Chance condition object
-	 * @return
-	 */
-	public ChanceCondition getTriggeredChanceCondition();
-}

+ 17 - 12
L2J_Server_BETA/java/com/l2jserver/gameserver/model/items/L2Weapon.java

@@ -33,6 +33,8 @@ import com.l2jserver.gameserver.model.items.type.WeaponType;
 import com.l2jserver.gameserver.model.skills.Skill;
 import com.l2jserver.gameserver.model.skills.Skill;
 import com.l2jserver.gameserver.model.stats.Env;
 import com.l2jserver.gameserver.model.stats.Env;
 import com.l2jserver.gameserver.model.stats.Formulas;
 import com.l2jserver.gameserver.model.stats.Formulas;
+import com.l2jserver.gameserver.network.SystemMessageId;
+import com.l2jserver.gameserver.network.serverpackets.SystemMessage;
 import com.l2jserver.gameserver.util.Util;
 import com.l2jserver.gameserver.util.Util;
 import com.l2jserver.util.StringUtil;
 import com.l2jserver.util.StringUtil;
 
 
@@ -340,11 +342,10 @@ public final class L2Weapon extends L2Item
 	/**
 	/**
 	 * @param caster the L2Character pointing out the caster
 	 * @param caster the L2Character pointing out the caster
 	 * @param target the L2Character pointing out the target
 	 * @param target the L2Character pointing out the target
-	 * @param crit the boolean tells whether the hit was critical
 	 */
 	 */
-	public void getSkillEffects(L2Character caster, L2Character target, boolean crit)
+	public void castOnCriticalSkill(L2Character caster, L2Character target)
 	{
 	{
-		if ((_skillsOnCrit == null) || !crit)
+		if ((_skillsOnCrit == null))
 		{
 		{
 			return;
 			return;
 		}
 		}
@@ -381,13 +382,12 @@ public final class L2Weapon extends L2Item
 	 * @param caster the L2Character pointing out the caster
 	 * @param caster the L2Character pointing out the caster
 	 * @param target the L2Character pointing out the target
 	 * @param target the L2Character pointing out the target
 	 * @param trigger the L2Skill pointing out the skill triggering this action
 	 * @param trigger the L2Skill pointing out the skill triggering this action
-	 * @return the effects of skills associated with the item to be triggered onMagic.
 	 */
 	 */
-	public boolean getSkillEffects(L2Character caster, L2Character target, Skill trigger)
+	public void castOnMagicSkill(L2Character caster, L2Character target, Skill trigger)
 	{
 	{
 		if (_skillsOnMagic == null)
 		if (_skillsOnMagic == null)
 		{
 		{
-			return false;
+			return;
 		}
 		}
 		
 		
 		final Skill onMagicSkill = _skillsOnMagic.getSkill();
 		final Skill onMagicSkill = _skillsOnMagic.getSkill();
@@ -395,13 +395,13 @@ public final class L2Weapon extends L2Item
 		// Trigger only if both are good or bad magic.
 		// Trigger only if both are good or bad magic.
 		if (trigger.isBad() != onMagicSkill.isBad())
 		if (trigger.isBad() != onMagicSkill.isBad())
 		{
 		{
-			return false;
+			return;
 		}
 		}
 		
 		
 		// No Trigger if not Magic Skill
 		// No Trigger if not Magic Skill
 		if (!trigger.isMagic() && !onMagicSkill.isMagic())
 		if (!trigger.isMagic() && !onMagicSkill.isMagic())
 		{
 		{
-			return false;
+			return;
 		}
 		}
 		
 		
 		if (_skillsOnMagicCondition != null)
 		if (_skillsOnMagicCondition != null)
@@ -413,19 +413,19 @@ public final class L2Weapon extends L2Item
 			if (!_skillsOnMagicCondition.test(env))
 			if (!_skillsOnMagicCondition.test(env))
 			{
 			{
 				// Chance not met
 				// Chance not met
-				return false;
+				return;
 			}
 			}
 		}
 		}
 		
 		
 		if (!onMagicSkill.checkCondition(caster, target, false))
 		if (!onMagicSkill.checkCondition(caster, target, false))
 		{
 		{
 			// Skill condition not met
 			// Skill condition not met
-			return false;
+			return;
 		}
 		}
 		
 		
 		if (onMagicSkill.isBad() && (Formulas.calcShldUse(caster, target, onMagicSkill) == Formulas.SHIELD_DEFENSE_PERFECT_BLOCK))
 		if (onMagicSkill.isBad() && (Formulas.calcShldUse(caster, target, onMagicSkill) == Formulas.SHIELD_DEFENSE_PERFECT_BLOCK))
 		{
 		{
-			return false;
+			return;
 		}
 		}
 		
 		
 		L2Character[] targets =
 		L2Character[] targets =
@@ -451,6 +451,11 @@ public final class L2Weapon extends L2Item
 				});
 				});
 			//@formatter:on
 			//@formatter:on
 		}
 		}
-		return true;
+		if (caster.isPlayer())
+		{
+			SystemMessage sm = SystemMessage.getSystemMessage(SystemMessageId.S1_HAS_BEEN_ACTIVATED);
+			sm.addSkillName(onMagicSkill);
+			caster.sendPacket(sm);
+		}
 	}
 	}
 }
 }

+ 2 - 60
L2J_Server_BETA/java/com/l2jserver/gameserver/model/skills/Skill.java

@@ -38,7 +38,6 @@ import com.l2jserver.gameserver.handler.ITargetTypeHandler;
 import com.l2jserver.gameserver.handler.TargetHandler;
 import com.l2jserver.gameserver.handler.TargetHandler;
 import com.l2jserver.gameserver.instancemanager.HandysBlockCheckerManager;
 import com.l2jserver.gameserver.instancemanager.HandysBlockCheckerManager;
 import com.l2jserver.gameserver.model.ArenaParticipantsHolder;
 import com.l2jserver.gameserver.model.ArenaParticipantsHolder;
-import com.l2jserver.gameserver.model.ChanceCondition;
 import com.l2jserver.gameserver.model.L2ExtractableProductItem;
 import com.l2jserver.gameserver.model.L2ExtractableProductItem;
 import com.l2jserver.gameserver.model.L2ExtractableSkill;
 import com.l2jserver.gameserver.model.L2ExtractableSkill;
 import com.l2jserver.gameserver.model.L2Object;
 import com.l2jserver.gameserver.model.L2Object;
@@ -55,7 +54,6 @@ import com.l2jserver.gameserver.model.effects.AbstractEffect;
 import com.l2jserver.gameserver.model.effects.L2EffectType;
 import com.l2jserver.gameserver.model.effects.L2EffectType;
 import com.l2jserver.gameserver.model.entity.TvTEvent;
 import com.l2jserver.gameserver.model.entity.TvTEvent;
 import com.l2jserver.gameserver.model.holders.ItemHolder;
 import com.l2jserver.gameserver.model.holders.ItemHolder;
-import com.l2jserver.gameserver.model.interfaces.IChanceSkillTrigger;
 import com.l2jserver.gameserver.model.interfaces.IIdentifiable;
 import com.l2jserver.gameserver.model.interfaces.IIdentifiable;
 import com.l2jserver.gameserver.model.skills.funcs.Func;
 import com.l2jserver.gameserver.model.skills.funcs.Func;
 import com.l2jserver.gameserver.model.skills.funcs.FuncTemplate;
 import com.l2jserver.gameserver.model.skills.funcs.FuncTemplate;
@@ -70,7 +68,7 @@ import com.l2jserver.gameserver.network.serverpackets.SystemMessage;
 import com.l2jserver.gameserver.util.Util;
 import com.l2jserver.gameserver.util.Util;
 import com.l2jserver.util.Rnd;
 import com.l2jserver.util.Rnd;
 
 
-public final class Skill implements IChanceSkillTrigger, IIdentifiable
+public final class Skill implements IIdentifiable
 {
 {
 	private static final Logger _log = Logger.getLogger(Skill.class.getName());
 	private static final Logger _log = Logger.getLogger(Skill.class.getName());
 	
 	
@@ -172,9 +170,6 @@ public final class Skill implements IChanceSkillTrigger, IIdentifiable
 	
 	
 	private final int _minPledgeClass;
 	private final int _minPledgeClass;
 	private final int _chargeConsume;
 	private final int _chargeConsume;
-	private final int _triggeredId;
-	private final int _triggeredLevel;
-	private final String _chanceType;
 	private final int _soulMaxConsume;
 	private final int _soulMaxConsume;
 	
 	
 	private final boolean _isHeroSkill; // If true the skill is a Hero Skill
 	private final boolean _isHeroSkill; // If true the skill is a Hero Skill
@@ -193,8 +188,6 @@ public final class Skill implements IChanceSkillTrigger, IIdentifiable
 	
 	
 	private final Map<EffectScope, List<AbstractEffect>> _effectLists = new EnumMap<>(EffectScope.class);
 	private final Map<EffectScope, List<AbstractEffect>> _effectLists = new EnumMap<>(EffectScope.class);
 	
 	
-	protected ChanceCondition _chanceCondition = null;
-	
 	// Flying support
 	// Flying support
 	private final FlyType _flyType;
 	private final FlyType _flyType;
 	private final int _flyRadius;
 	private final int _flyRadius;
@@ -307,7 +300,7 @@ public final class Skill implements IChanceSkillTrigger, IIdentifiable
 			}
 			}
 		}
 		}
 		
 		
-		_targetType = set.getEnum("targetType", L2TargetType.class);
+		_targetType = set.getEnum("targetType", L2TargetType.class, L2TargetType.SELF);
 		_power = set.getFloat("power", 0.f);
 		_power = set.getFloat("power", 0.f);
 		_pvpPower = set.getFloat("pvpPower", (float) getPower());
 		_pvpPower = set.getFloat("pvpPower", (float) getPower());
 		_pvePower = set.getFloat("pvePower", (float) getPower());
 		_pvePower = set.getFloat("pvePower", (float) getPower());
@@ -335,13 +328,6 @@ public final class Skill implements IChanceSkillTrigger, IIdentifiable
 		
 		
 		_minPledgeClass = set.getInt("minPledgeClass", 0);
 		_minPledgeClass = set.getInt("minPledgeClass", 0);
 		_chargeConsume = set.getInt("chargeConsume", 0);
 		_chargeConsume = set.getInt("chargeConsume", 0);
-		_triggeredId = set.getInt("triggeredId", 0);
-		_triggeredLevel = set.getInt("triggeredLevel", 1);
-		_chanceType = set.getString("chanceType", "");
-		if (!_chanceType.isEmpty())
-		{
-			_chanceCondition = ChanceCondition.parse(set);
-		}
 		
 		
 		_soulMaxConsume = set.getInt("soulMaxConsumeCount", 0);
 		_soulMaxConsume = set.getInt("soulMaxConsumeCount", 0);
 		_blowChance = set.getInt("blowChance", 0);
 		_blowChance = set.getInt("blowChance", 0);
@@ -715,21 +701,6 @@ public final class Skill implements IChanceSkillTrigger, IIdentifiable
 		return _displayLevel;
 		return _displayLevel;
 	}
 	}
 	
 	
-	public int getTriggeredId()
-	{
-		return _triggeredId;
-	}
-	
-	public int getTriggeredLevel()
-	{
-		return _triggeredLevel;
-	}
-	
-	public boolean triggerAnotherSkill()
-	{
-		return _triggeredId > 1;
-	}
-	
 	/**
 	/**
 	 * Return skill basicProperty base stat (STR, INT ...).
 	 * Return skill basicProperty base stat (STR, INT ...).
 	 * @return
 	 * @return
@@ -896,11 +867,6 @@ public final class Skill implements IChanceSkillTrigger, IIdentifiable
 		return (_operateType != null) && _operateType.isSelfContinuous();
 		return (_operateType != null) && _operateType.isSelfContinuous();
 	}
 	}
 	
 	
-	public boolean isChance()
-	{
-		return (_chanceCondition != null) && isPassive();
-	}
-	
 	public boolean isChanneling()
 	public boolean isChanneling()
 	{
 	{
 		return (_operateType != null) && _operateType.isChanneling();
 		return (_operateType != null) && _operateType.isChanneling();
@@ -1627,30 +1593,6 @@ public final class Skill implements IChanceSkillTrigger, IIdentifiable
 		return _refId;
 		return _refId;
 	}
 	}
 	
 	
-	@Override
-	public boolean triggersChanceSkill()
-	{
-		return (_triggeredId > 0) && isChance();
-	}
-	
-	@Override
-	public int getTriggeredChanceId()
-	{
-		return _triggeredId;
-	}
-	
-	@Override
-	public int getTriggeredChanceLevel()
-	{
-		return _triggeredLevel;
-	}
-	
-	@Override
-	public ChanceCondition getTriggeredChanceCondition()
-	{
-		return _chanceCondition;
-	}
-	
 	public String getAttributeName()
 	public String getAttributeName()
 	{
 	{
 		return _attribute;
 		return _attribute;