00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022 package com.realtime.crossfire.jxclient.settings.options;
00023
00024 import com.realtime.crossfire.jxclient.queue.CommandQueue;
00025 import java.util.Collection;
00026 import java.util.LinkedList;
00027 import org.jetbrains.annotations.NotNull;
00028
00033 public class Pickup {
00034
00038 public static final long DEFAULT_PICKUP_MODE = 0;
00039
00043 public static final long PU_NOTHING = 0x00000000L;
00044
00048 public static final long PU_RATIO = 0x0000000FL;
00049
00053 public static final long PU_FOOD = 0x00000010L;
00054
00058 public static final long PU_DRINK = 0x00000020L;
00059
00063 public static final long PU_VALUABLES = 0x00000040L;
00064
00068 public static final long PU_BOW = 0x00000080L;
00069
00073 public static final long PU_ARROW = 0x00000100L;
00074
00078 public static final long PU_HELMET = 0x00000200L;
00079
00083 public static final long PU_SHIELD = 0x00000400L;
00084
00088 public static final long PU_ARMOUR = 0x00000800L;
00089
00093 public static final long PU_BOOTS = 0x00001000L;
00094
00098 public static final long PU_GLOVES = 0x00002000L;
00099
00103 public static final long PU_CLOAK = 0x00004000L;
00104
00108 public static final long PU_KEY = 0x00008000L;
00109
00113 public static final long PU_MISSILE_WEAPON = 0x00010000L;
00114
00118 public static final long PU_MELEE_WEAPON = 0x00020000L;
00119
00123 public static final long PU_MAGICAL = 0x00040000L;
00124
00128 public static final long PU_POTION = 0x00080000L;
00129
00133 public static final long PU_SPELLBOOK = 0x00100000L;
00134
00138 public static final long PU_SKILLSCROLL = 0x00200000L;
00139
00143 public static final long PU_READABLES = 0x00400000L;
00144
00148 public static final long PU_MAGIC_DEVICE = 0x00800000L;
00149
00153 public static final long PU_NOT_CURSED = 0x01000000L;
00154
00158 public static final long PU_JEWELS = 0x02000000L;
00159
00163 public static final long PU_FLESH = 0x04000000L;
00164
00168 public static final long PU_CONTAINER = 0x08000000L;
00169
00173 public static final long PU_DEBUG = 0x10000000L;
00174
00178 public static final long PU_INHIBIT = 0x20000000L;
00179
00183 public static final long PU_STOP = 0x40000000L;
00184
00188 public static final long PU_NEW_MODE = 0x80000000L;
00189
00193 @NotNull
00194 private final Collection<PickupOption> pickupOptions = new LinkedList<PickupOption>();
00195
00199 @NotNull
00200 private final CommandQueue commandQueue;
00201
00205 private long pickupMode = DEFAULT_PICKUP_MODE;
00206
00213 public Pickup(@NotNull final CommandQueue commandQueue, @NotNull final OptionManager optionManager) throws OptionException {
00214 this.commandQueue = commandQueue;
00215
00216
00217
00218
00219
00220
00221
00222
00223
00224
00225
00226
00227
00228
00229
00230
00231 optionManager.addOption("pickup_food", "Pickup mode: food.", newPickupOption(PU_FOOD, "<html>Picks up food items.<br>Flesh items are not included."));
00232 optionManager.addOption("pickup_drink", "Pickup mode: drinks.", newPickupOption(PU_DRINK, "<html>Picks up drinkable items."));
00233 optionManager.addOption("pickup_valuables", "Pickup mode: valuables.", newPickupOption(PU_VALUABLES, "<html>Picks up money and gems."));
00234 optionManager.addOption("pickup_bow", "Pickup mode: bows.", newPickupOption(PU_BOW, "<html>Picks up bows and crossbows."));
00235 optionManager.addOption("pickup_arrow", "Pickup mode: arrows.", newPickupOption(PU_ARROW, "<html>Picks up arrows and bolts."));
00236 optionManager.addOption("pickup_helmet", "Pickup mode: helmets.", newPickupOption(PU_HELMET, "<html>Picks up helmets."));
00237 optionManager.addOption("pickup_shield", "Pickup mode: shields.", newPickupOption(PU_SHIELD, "<html>Picks up shields."));
00238 optionManager.addOption("pickup_armour", "Pickup mode: armors.", newPickupOption(PU_ARMOUR, "<html>Picks up armors."));
00239 optionManager.addOption("pickup_boots", "Pickup mode: boots.", newPickupOption(PU_BOOTS, "<html>Picks up boots."));
00240 optionManager.addOption("pickup_gloves", "Pickup mode: gloves.", newPickupOption(PU_GLOVES, "<html>Picks up gloves."));
00241 optionManager.addOption("pickup_cloak", "Pickup mode: cloaks.", newPickupOption(PU_CLOAK, "<html>Picks up cloaks."));
00242 optionManager.addOption("pickup_key", "Pickup mode: keys.", newPickupOption(PU_KEY, "<html>Picks up keys."));
00243 optionManager.addOption("pickup_missile_weapon", "Pickup mode: missile weapons.", newPickupOption(PU_MISSILE_WEAPON, "<html>Picks up missile weapons."));
00244 optionManager.addOption("pickup_melee_weapon", "Pickup mode: melee weapons.", newPickupOption(PU_MELEE_WEAPON, "<html>Picks up melee weapons."));
00245 optionManager.addOption("pickup_magical", "Pickup mode: magical items.", newPickupOption(PU_MAGICAL, "<html>Picks up magical items."));
00246 optionManager.addOption("pickup_potion", "Pickup mode: potions.", newPickupOption(PU_POTION, "<html>Picks up potions."));
00247 optionManager.addOption("pickup_spellbook", "Pickup mode: spellbooks.", newPickupOption(PU_SPELLBOOK, "<html>Picks up spellbooks and prayer books."));
00248 optionManager.addOption("pickup_skillscroll", "Pickup mode: skillscrolls.", newPickupOption(PU_SKILLSCROLL, "<html>Picks up skillscrolls."));
00249 optionManager.addOption("pickup_readables", "Pickup mode: readables.", newPickupOption(PU_READABLES, "<html>Picks up readables."));
00250 optionManager.addOption("pickup_magic_device", "Pickup mode: magic devices.", newPickupOption(PU_MAGIC_DEVICE, "<html>Picks up magic devices."));
00251 optionManager.addOption("pickup_not_cursed", "Pickup mode: not cursed items.", newPickupOption(PU_NOT_CURSED, "<html>Ignores cursed items."));
00252 optionManager.addOption("pickup_jewels", "Pickup mode: jewels.", newPickupOption(PU_JEWELS, "<html>Picks up rings and amulets."));
00253 optionManager.addOption("pickup_flesh", "Pickup mode: flesh.", newPickupOption(PU_FLESH, "<html>Picks up flesh items."));
00254 optionManager.addOption("pickup_containers", "Pickup mode: container.", newPickupOption(PU_CONTAINER, "<html>Picks up containers."));
00255 optionManager.addOption("pickup_inhibit", "Pickup mode: inhibit pickup.", newPickupOption(PU_INHIBIT, "<html>Disables pickup mode."));
00256 optionManager.addOption("pickup_stop", "Pickup mode: stop before pickup.", newPickupOption(PU_STOP, "<html>Stops running when picking up items."));
00257 }
00258
00265 @NotNull
00266 private Option newPickupOption(final long option, @NotNull final String tooltipText) {
00267 final PickupOption pickupOption = new PickupOption(this, option, tooltipText);
00268 pickupOptions.add(pickupOption);
00269 return pickupOption;
00270 }
00271
00278 public void updatePickupMode(final long pickupMode, final boolean sendToServer) {
00279 if (this.pickupMode == pickupMode) {
00280 return;
00281 }
00282 this.pickupMode = pickupMode;
00283 if (sendToServer) {
00284 commandQueue.sendNcom(true, 1, "pickup "+((pickupMode == PU_NOTHING ? 0 : pickupMode|PU_NEW_MODE)&0xFFFFFFFFL));
00285 }
00286 for (final PickupOption pickupOption : pickupOptions) {
00287 pickupOption.setPickupMode(pickupMode);
00288 }
00289 }
00290
00295 public long getPickupMode() {
00296 return pickupMode;
00297 }
00298
00304 public void setPickupMode(final long pickupMode, final boolean set) {
00305 final long newPickupMode;
00306 if (set) {
00307 newPickupMode = this.pickupMode|pickupMode;
00308 } else {
00309 newPickupMode = this.pickupMode&~pickupMode;
00310 }
00311 updatePickupMode(newPickupMode, true);
00312 }
00313
00314 }