@Override public void run(final String cmd, final String parameters) { int splitIndex = parameters.indexOf("="); if (splitIndex == -1) { // Allow reading of system properties if (parameters.startsWith("System.")) { RequestLogger.printLine(System.getProperty(parameters.substring(7))); } else if (Preferences.isUserEditable(parameters)) { RequestLogger.printLine(Preferences.getString(parameters)); } return; } String name = parameters.substring(0, splitIndex).trim(); if (!Preferences.isUserEditable(name)) { return; } String value = parameters.substring(splitIndex + 1).trim(); if (value.startsWith("\"")) { value = value.substring(1, value.endsWith("\"") ? value.length() - 1 : value.length()); } while (value.endsWith(";")) { value = value.substring(0, value.length() - 1).trim(); } if (name.equals("battleAction")) { if (value.contains(";") || value.startsWith("consult")) { CombatActionManager.setDefaultAction(value); value = "custom combat script"; } else { value = CombatActionManager.getLongCombatOptionName(value); } // Special handling of the battle action property, // such that auto-recovery gets reset as needed. if (name.equals("battleAction") && value != null) { LockableListFactory.setSelectedItem(KoLCharacter.getBattleSkillNames(), value); } } if (name.equals("customCombatScript")) { ChangeCombatScriptCommand.update(value); return; } if (name.startsWith("combatHotkey")) { String desiredValue = CombatActionManager.getLongCombatOptionName(value); if (!desiredValue.startsWith("attack") || value.startsWith("attack")) { value = desiredValue; } } if (name.equals("_userMods")) { Modifiers.overrideModifier("Generated:_userMods", value); KoLCharacter.recalculateAdjustments(); KoLCharacter.updateStatus(); } if (Preferences.getString(name).equals(value)) { return; } // suppress CLI output iff it is a pref that starts with _ AND is defined in defaults.txt if (!name.startsWith("_") || Preferences.containsDefault(name)) RequestLogger.printLine(name + " => " + value); Preferences.setString(name, value); if (name.startsWith("combatHotkey")) { StationaryButtonDecorator.reloadCombatHotkeyMap(); } }