Fixed Speed effect reading weaponType as SpeedType.
Contributed by Sahar.
This commit is contained in:
		| @@ -16,14 +16,14 @@ | ||||
|  */ | ||||
| package handlers.effecthandlers; | ||||
|  | ||||
| import java.util.Arrays; | ||||
| import java.util.List; | ||||
|  | ||||
| import org.l2jmobius.gameserver.enums.SpeedType; | ||||
| import org.l2jmobius.gameserver.enums.StatModifierType; | ||||
| import org.l2jmobius.gameserver.model.StatSet; | ||||
| import org.l2jmobius.gameserver.model.actor.Creature; | ||||
| import org.l2jmobius.gameserver.model.conditions.ConditionUsingItemType; | ||||
| import org.l2jmobius.gameserver.model.effects.AbstractEffect; | ||||
| import org.l2jmobius.gameserver.model.items.type.WeaponType; | ||||
| import org.l2jmobius.gameserver.model.skills.Skill; | ||||
| import org.l2jmobius.gameserver.model.stats.Stat; | ||||
|  | ||||
| @@ -34,123 +34,64 @@ public class Speed extends AbstractEffect | ||||
| { | ||||
| 	private final double _amount; | ||||
| 	private final StatModifierType _mode; | ||||
| 	private List<SpeedType> _speedType; | ||||
| 	private ConditionUsingItemType _condition; | ||||
| 	 | ||||
| 	public Speed(StatSet params) | ||||
| 	{ | ||||
| 		_amount = params.getDouble("amount", 0); | ||||
| 		_mode = params.getEnum("mode", StatModifierType.class, StatModifierType.DIFF); | ||||
| 		_speedType = params.getEnumList("weaponType", SpeedType.class); | ||||
| 		if (_speedType == null) | ||||
| 		 | ||||
| 		int weaponTypesMask = 0; | ||||
| 		final List<String> weaponTypes = params.getList("weaponType", String.class); | ||||
| 		if (weaponTypes != null) | ||||
| 		{ | ||||
| 			_speedType = Arrays.asList(SpeedType.ALL); | ||||
| 			for (String weaponType : weaponTypes) | ||||
| 			{ | ||||
| 				try | ||||
| 				{ | ||||
| 					weaponTypesMask |= WeaponType.valueOf(weaponType).mask(); | ||||
| 				} | ||||
| 				catch (IllegalArgumentException e) | ||||
| 				{ | ||||
| 					final IllegalArgumentException exception = new IllegalArgumentException("weaponType should contain WeaponType enum value but found " + weaponType); | ||||
| 					exception.addSuppressed(e); | ||||
| 					throw exception; | ||||
| 				} | ||||
| 			} | ||||
| 		} | ||||
| 		if (weaponTypesMask != 0) | ||||
| 		{ | ||||
| 			_condition = new ConditionUsingItemType(weaponTypesMask); | ||||
| 		} | ||||
| 	} | ||||
| 	 | ||||
| 	@Override | ||||
| 	public void pump(Creature effected, Skill skill) | ||||
| 	{ | ||||
| 		switch (_mode) | ||||
| 		if (_condition == null || _condition.test(effected, effected, skill)) | ||||
| 		{ | ||||
| 			case DIFF: | ||||
| 			switch (_mode) | ||||
| 			{ | ||||
| 				for (SpeedType type : _speedType) | ||||
| 				case DIFF: | ||||
| 				{ | ||||
| 					switch (type) | ||||
| 					{ | ||||
| 						case RUN: | ||||
| 						{ | ||||
| 							effected.getStat().mergeAdd(Stat.RUN_SPEED, _amount); | ||||
| 							break; | ||||
| 						} | ||||
| 						case WALK: | ||||
| 						{ | ||||
| 							effected.getStat().mergeAdd(Stat.WALK_SPEED, _amount); | ||||
| 							break; | ||||
| 						} | ||||
| 						case SWIM_RUN: | ||||
| 						{ | ||||
| 							effected.getStat().mergeAdd(Stat.SWIM_RUN_SPEED, _amount); | ||||
| 							break; | ||||
| 						} | ||||
| 						case SWIM_WALK: | ||||
| 						{ | ||||
| 							effected.getStat().mergeAdd(Stat.SWIM_WALK_SPEED, _amount); | ||||
| 							break; | ||||
| 						} | ||||
| 						case FLY_RUN: | ||||
| 						{ | ||||
| 							effected.getStat().mergeAdd(Stat.FLY_RUN_SPEED, _amount); | ||||
| 							break; | ||||
| 						} | ||||
| 						case FLY_WALK: | ||||
| 						{ | ||||
| 							effected.getStat().mergeAdd(Stat.FLY_WALK_SPEED, _amount); | ||||
| 							break; | ||||
| 						} | ||||
| 						default: | ||||
| 						{ | ||||
| 							effected.getStat().mergeAdd(Stat.RUN_SPEED, _amount); | ||||
| 							effected.getStat().mergeAdd(Stat.WALK_SPEED, _amount); | ||||
| 							effected.getStat().mergeAdd(Stat.SWIM_RUN_SPEED, _amount); | ||||
| 							effected.getStat().mergeAdd(Stat.SWIM_WALK_SPEED, _amount); | ||||
| 							effected.getStat().mergeAdd(Stat.FLY_RUN_SPEED, _amount); | ||||
| 							effected.getStat().mergeAdd(Stat.FLY_WALK_SPEED, _amount); | ||||
| 							break; | ||||
| 						} | ||||
| 					} | ||||
| 					effected.getStat().mergeAdd(Stat.RUN_SPEED, _amount); | ||||
| 					effected.getStat().mergeAdd(Stat.WALK_SPEED, _amount); | ||||
| 					effected.getStat().mergeAdd(Stat.SWIM_RUN_SPEED, _amount); | ||||
| 					effected.getStat().mergeAdd(Stat.SWIM_WALK_SPEED, _amount); | ||||
| 					effected.getStat().mergeAdd(Stat.FLY_RUN_SPEED, _amount); | ||||
| 					effected.getStat().mergeAdd(Stat.FLY_WALK_SPEED, _amount); | ||||
| 					break; | ||||
| 				} | ||||
| 				break; | ||||
| 			} | ||||
| 			case PER: | ||||
| 			{ | ||||
| 				for (SpeedType type : _speedType) | ||||
| 				case PER: | ||||
| 				{ | ||||
| 					switch (type) | ||||
| 					{ | ||||
| 						case RUN: | ||||
| 						{ | ||||
| 							effected.getStat().mergeMul(Stat.RUN_SPEED, (_amount / 100) + 1); | ||||
| 							break; | ||||
| 						} | ||||
| 						case WALK: | ||||
| 						{ | ||||
| 							effected.getStat().mergeMul(Stat.WALK_SPEED, (_amount / 100) + 1); | ||||
| 							break; | ||||
| 						} | ||||
| 						case SWIM_RUN: | ||||
| 						{ | ||||
| 							effected.getStat().mergeMul(Stat.SWIM_RUN_SPEED, (_amount / 100) + 1); | ||||
| 							break; | ||||
| 						} | ||||
| 						case SWIM_WALK: | ||||
| 						{ | ||||
| 							effected.getStat().mergeMul(Stat.SWIM_WALK_SPEED, (_amount / 100) + 1); | ||||
| 							break; | ||||
| 						} | ||||
| 						case FLY_RUN: | ||||
| 						{ | ||||
| 							effected.getStat().mergeMul(Stat.FLY_RUN_SPEED, (_amount / 100) + 1); | ||||
| 							break; | ||||
| 						} | ||||
| 						case FLY_WALK: | ||||
| 						{ | ||||
| 							effected.getStat().mergeMul(Stat.FLY_WALK_SPEED, (_amount / 100) + 1); | ||||
| 							break; | ||||
| 						} | ||||
| 						default: | ||||
| 						{ | ||||
| 							effected.getStat().mergeMul(Stat.RUN_SPEED, (_amount / 100) + 1); | ||||
| 							effected.getStat().mergeMul(Stat.WALK_SPEED, (_amount / 100) + 1); | ||||
| 							effected.getStat().mergeMul(Stat.SWIM_RUN_SPEED, (_amount / 100) + 1); | ||||
| 							effected.getStat().mergeMul(Stat.SWIM_WALK_SPEED, (_amount / 100) + 1); | ||||
| 							effected.getStat().mergeMul(Stat.FLY_RUN_SPEED, (_amount / 100) + 1); | ||||
| 							effected.getStat().mergeMul(Stat.FLY_WALK_SPEED, (_amount / 100) + 1); | ||||
| 							break; | ||||
| 						} | ||||
| 					} | ||||
| 					effected.getStat().mergeMul(Stat.RUN_SPEED, (_amount / 100) + 1); | ||||
| 					effected.getStat().mergeMul(Stat.WALK_SPEED, (_amount / 100) + 1); | ||||
| 					effected.getStat().mergeMul(Stat.SWIM_RUN_SPEED, (_amount / 100) + 1); | ||||
| 					effected.getStat().mergeMul(Stat.SWIM_WALK_SPEED, (_amount / 100) + 1); | ||||
| 					effected.getStat().mergeMul(Stat.FLY_RUN_SPEED, (_amount / 100) + 1); | ||||
| 					effected.getStat().mergeMul(Stat.FLY_WALK_SPEED, (_amount / 100) + 1); | ||||
| 					break; | ||||
| 				} | ||||
| 				break; | ||||
| 			} | ||||
| 		} | ||||
| 	} | ||||
|   | ||||
		Reference in New Issue
	
	Block a user
	 MobiusDevelopment
					MobiusDevelopment