package admincommands; import java.util.ArrayList; import java.util.List; import com.aionemu.gameserver.model.gameobjects.player.Player; import com.aionemu.gameserver.model.stats.calc.Stat2; import com.aionemu.gameserver.model.stats.calc.StatOwner; import com.aionemu.gameserver.model.stats.calc.functions.IStatFunction; import com.aionemu.gameserver.model.stats.calc.functions.StatFunction; import com.aionemu.gameserver.model.stats.container.StatEnum; import com.aionemu.gameserver.utils.chathandlers.AdminCommand; import com.aionemu.gameserver.utils.stats.CalculationType; /** * @author ATracer, Neon */ public class Speed extends AdminCommand implements StatOwner { public Speed() { super("speed", "Sets your speed."); setSyntaxInfo("<0-100> - Set your speed to the specified value (0 to reset)."); } @Override public void execute(Player admin, String... params) { if (params.length == 0) { sendInfo(admin); return; } float parameter = 0; try { parameter = Float.parseFloat(params[0]); if (parameter < 0 || parameter > 100) { throw new IllegalArgumentException("Speed must be between 0 and 100."); } } catch (IllegalArgumentException e) { sendInfo(admin, e.getClass() == IllegalArgumentException.class ? e.getMessage() : null); // default info for NumberFormatException return; } admin.getGameStats().endEffect(this); if (parameter == 0) { sendInfo(admin, "Your standard speed has been recovered."); return; } List functions = new ArrayList<>(); functions.add(new SpeedFunction(StatEnum.SPEED, parameter)); functions.add(new SpeedFunction(StatEnum.FLY_SPEED, parameter)); admin.getGameStats().addEffect(this, functions); sendInfo(admin, "Your speed is now fixed at " + parameter); } class SpeedFunction extends StatFunction { private int speed; SpeedFunction(StatEnum stat, float speed) { this.stat = stat; this.speed = (int) (speed * 1000); } @Override public void apply(Stat2 otherStat, CalculationType... calculationTypes) { otherStat.setBase(speed); otherStat.setBaseRate(1); otherStat.setBonus(0); } @Override public int getPriority() { return 120; } } }