Crossfire JXClient, Trunk  R20561
Pickup.java
Go to the documentation of this file.
1 /*
2  * This file is part of JXClient, the Fullscreen Java Crossfire Client.
3  *
4  * JXClient is free software; you can redistribute it and/or modify
5  * it under the terms of the GNU General Public License as published by
6  * the Free Software Foundation; either version 2 of the License, or
7  * (at your option) any later version.
8  *
9  * JXClient is distributed in the hope that it will be useful,
10  * but WITHOUT ANY WARRANTY; without even the implied warranty of
11  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12  * GNU General Public License for more details.
13  *
14  * You should have received a copy of the GNU General Public License
15  * along with JXClient; if not, write to the Free Software
16  * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
17  *
18  * Copyright (C) 2005-2008 Yann Chachkoff.
19  * Copyright (C) 2006-2011 Andreas Kirschbaum.
20  */
21 
22 package com.realtime.crossfire.jxclient.settings.options;
23 
25 import java.util.Collection;
26 import java.util.LinkedList;
27 import org.jetbrains.annotations.NotNull;
28 
33 public class Pickup {
34 
38  public static final long DEFAULT_PICKUP_MODE = 0;
39 
43  public static final long PU_NOTHING = 0x00000000L;
44 
48  public static final long PU_RATIO = 0x0000000FL;
49 
53  private static final long PU_DEBUG = 0x10000000L;
54 
58  private static final long PU_NEW_MODE = 0x80000000L;
59 
63  @NotNull
64  private final Collection<PickupOption> pickupOptions = new LinkedList<>();
65 
69  @NotNull
70  @SuppressWarnings("PublicField")
71  public final PickupOption food = newPickupOption(0x00000010L, "<html>Picks up food items.<br>Flesh items are not included.");
72 
76  @NotNull
77  @SuppressWarnings("PublicField")
78  public final PickupOption drink = newPickupOption(0x00000020L, "<html>Picks up drinkable items.");
79 
83  @NotNull
84  @SuppressWarnings("PublicField")
85  public final PickupOption valuables = newPickupOption(0x00000040L, "<html>Picks up money and gems.");
86 
90  @NotNull
91  @SuppressWarnings("PublicField")
92  public final PickupOption bow = newPickupOption(0x00000080L, "<html>Picks up bows and crossbows.");
93 
97  @NotNull
98  @SuppressWarnings("PublicField")
99  public final PickupOption arrow = newPickupOption(0x00000100L, "<html>Picks up arrows and bolts.");
100 
104  @NotNull
105  @SuppressWarnings("PublicField")
106  public final PickupOption helmet = newPickupOption(0x00000200L, "<html>Picks up helmets.");
107 
111  @NotNull
112  @SuppressWarnings("PublicField")
113  public final PickupOption shield = newPickupOption(0x00000400L, "<html>Picks up shields.");
114 
118  @NotNull
119  @SuppressWarnings("PublicField")
120  public final PickupOption armor = newPickupOption(0x00000800L, "<html>Picks up armors.");
121 
125  @NotNull
126  @SuppressWarnings("PublicField")
127  public final PickupOption boot = newPickupOption(0x00001000L, "<html>Picks up boots.");
128 
132  @NotNull
133  @SuppressWarnings("PublicField")
134  public final PickupOption glove = newPickupOption(0x00002000L, "<html>Picks up gloves.");
135 
139  @NotNull
140  @SuppressWarnings("PublicField")
141  public final PickupOption cloak = newPickupOption(0x00004000L, "<html>Picks up cloaks.");
142 
146  @NotNull
147  @SuppressWarnings("PublicField")
148  public final PickupOption key = newPickupOption(0x00008000L, "<html>Picks up keys.");
149 
153  @NotNull
154  @SuppressWarnings("PublicField")
155  public final PickupOption missileWeapon = newPickupOption(0x00010000L, "<html>Picks up missile weapons.");
156 
160  @NotNull
161  @SuppressWarnings("PublicField")
162  public final PickupOption meleeWeapon = newPickupOption(0x00020000L, "<html>Picks up melee weapons.");
163 
167  @NotNull
168  @SuppressWarnings("PublicField")
169  public final PickupOption magicalItem = newPickupOption(0x00040000L, "<html>Picks up magical items.");
170 
174  @NotNull
175  @SuppressWarnings("PublicField")
176  public final PickupOption potion = newPickupOption(0x00080000L, "<html>Picks up potions.");
177 
181  @NotNull
182  @SuppressWarnings("PublicField")
183  public final PickupOption spellbook = newPickupOption(0x00100000L, "<html>Picks up spellbooks and prayer books.");
184 
188  @NotNull
189  @SuppressWarnings("PublicField")
190  public final PickupOption skillscroll = newPickupOption(0x00200000L, "<html>Picks up skillscrolls.");
191 
195  @NotNull
196  @SuppressWarnings("PublicField")
197  public final PickupOption readable = newPickupOption(0x00400000L, "<html>Picks up readables.");
198 
202  @NotNull
203  @SuppressWarnings("PublicField")
204  public final PickupOption magicDevice = newPickupOption(0x00800000L, "<html>Picks up magic devices.");
205 
209  @NotNull
210  @SuppressWarnings("PublicField")
211  public final PickupOption notCursed = newPickupOption(0x01000000L, "<html>Ignores cursed items.");
212 
216  @NotNull
217  @SuppressWarnings("PublicField")
218  public final PickupOption jewel = newPickupOption(0x02000000L, "<html>Picks up rings and amulets.");
219 
223  @NotNull
224  @SuppressWarnings("PublicField")
225  public final PickupOption flesh = newPickupOption(0x04000000L, "<html>Picks up flesh items.");
226 
230  @NotNull
231  @SuppressWarnings("PublicField")
232  public final PickupOption container = newPickupOption(0x08000000L, "<html>Picks up containers.");
233 
237  @NotNull
238  @SuppressWarnings("PublicField")
239  public final PickupOption inhibit = newPickupOption(0x20000000L, "<html>Disables pickup mode.");
240 
244  @NotNull
245  @SuppressWarnings("PublicField")
246  public final PickupOption stop = newPickupOption(0x40000000L, "<html>Stops running when picking up items.");
247 
251  @NotNull
252  private final CommandQueue commandQueue;
253 
257  @SuppressWarnings("RedundantFieldInitialization")
258  private long pickupMode = DEFAULT_PICKUP_MODE;
259 
266  public Pickup(@NotNull final CommandQueue commandQueue, @NotNull final OptionManager optionManager) throws OptionException {
267  this.commandQueue = commandQueue;
268  // optionManager.addOption("pickup_ratio0", "Pickup mode: weight/value off", newPickupOption(PU_RATIO, 0));
269  // optionManager.addOption("pickup_ratio5", "Pickup mode: weight/value >= 5", newPickupOption(PU_RATIO, 1));
270  // optionManager.addOption("pickup_ratio10", "Pickup mode: weight/value >= 10", newPickupOption(PU_RATIO, 2));
271  // optionManager.addOption("pickup_ratio15", "Pickup mode: weight/value >= 15", newPickupOption(PU_RATIO, 3));
272  // optionManager.addOption("pickup_ratio20", "Pickup mode: weight/value >= 20", newPickupOption(PU_RATIO, 4));
273  // optionManager.addOption("pickup_ratio25", "Pickup mode: weight/value >= 25", newPickupOption(PU_RATIO, 5));
274  // optionManager.addOption("pickup_ratio30", "Pickup mode: weight/value >= 30", newPickupOption(PU_RATIO, 6));
275  // optionManager.addOption("pickup_ratio35", "Pickup mode: weight/value >= 35", newPickupOption(PU_RATIO, 7));
276  // optionManager.addOption("pickup_ratio40", "Pickup mode: weight/value >= 40", newPickupOption(PU_RATIO, 8));
277  // optionManager.addOption("pickup_ratio45", "Pickup mode: weight/value >= 45", newPickupOption(PU_RATIO, 9));
278  // optionManager.addOption("pickup_ratio50", "Pickup mode: weight/value >= 50", newPickupOption(PU_RATIO, 10));
279  // optionManager.addOption("pickup_ratio55", "Pickup mode: weight/value >= 55", newPickupOption(PU_RATIO, 11));
280  // optionManager.addOption("pickup_ratio60", "Pickup mode: weight/value >= 60", newPickupOption(PU_RATIO, 12));
281  // optionManager.addOption("pickup_ratio65", "Pickup mode: weight/value >= 65", newPickupOption(PU_RATIO, 13));
282  // optionManager.addOption("pickup_ratio70", "Pickup mode: weight/value >= 70", newPickupOption(PU_RATIO, 14));
283  // optionManager.addOption("pickup_ratio75", "Pickup mode: weight/value >= 75", newPickupOption(PU_RATIO, 15));
284  optionManager.addOption("pickup_food", "Pickup mode: food.", food);
285  optionManager.addOption("pickup_drink", "Pickup mode: drinks.", drink);
286  optionManager.addOption("pickup_valuables", "Pickup mode: valuables.", valuables);
287  optionManager.addOption("pickup_bow", "Pickup mode: bows.", bow);
288  optionManager.addOption("pickup_arrow", "Pickup mode: arrows.", arrow);
289  optionManager.addOption("pickup_helmet", "Pickup mode: helmets.", helmet);
290  optionManager.addOption("pickup_shield", "Pickup mode: shields.", shield);
291  optionManager.addOption("pickup_armour", "Pickup mode: armors.", armor);
292  optionManager.addOption("pickup_boots", "Pickup mode: boots.", boot);
293  optionManager.addOption("pickup_gloves", "Pickup mode: gloves.", glove);
294  optionManager.addOption("pickup_cloak", "Pickup mode: cloaks.", cloak);
295  optionManager.addOption("pickup_key", "Pickup mode: keys.", key);
296  optionManager.addOption("pickup_missile_weapon", "Pickup mode: missile weapons.", missileWeapon);
297  optionManager.addOption("pickup_melee_weapon", "Pickup mode: melee weapons.", meleeWeapon);
298  optionManager.addOption("pickup_magical", "Pickup mode: magical items.", magicalItem);
299  optionManager.addOption("pickup_potion", "Pickup mode: potions.", potion);
300  optionManager.addOption("pickup_spellbook", "Pickup mode: spellbooks.", spellbook);
301  optionManager.addOption("pickup_skillscroll", "Pickup mode: skillscrolls.", skillscroll);
302  optionManager.addOption("pickup_readables", "Pickup mode: readables.", readable);
303  optionManager.addOption("pickup_magic_device", "Pickup mode: magic devices.", magicDevice);
304  optionManager.addOption("pickup_not_cursed", "Pickup mode: not cursed items.", notCursed);
305  optionManager.addOption("pickup_jewels", "Pickup mode: jewels.", jewel);
306  optionManager.addOption("pickup_flesh", "Pickup mode: flesh.", flesh);
307  optionManager.addOption("pickup_containers", "Pickup mode: container.", container);
308  optionManager.addOption("pickup_inhibit", "Pickup mode: inhibit pickup.", inhibit);
309  optionManager.addOption("pickup_stop", "Pickup mode: stop before pickup.", stop);
310  }
311 
318  @NotNull
319  private PickupOption newPickupOption(final long option, @NotNull final String tooltipText) {
320  final PickupOption pickupOption = new PickupOption(this, option, tooltipText);
321  pickupOptions.add(pickupOption);
322  return pickupOption;
323  }
324 
331  public void updatePickupMode(final long pickupMode, final boolean sendToServer) {
332  if (this.pickupMode == pickupMode) {
333  return;
334  }
335  this.pickupMode = pickupMode;
336  if (sendToServer) {
337  commandQueue.sendNcom(true, 1, "pickup "+((pickupMode == PU_NOTHING ? 0 : pickupMode|PU_NEW_MODE)&0xFFFFFFFFL));
338  }
339  for (final PickupOption pickupOption : pickupOptions) {
340  pickupOption.setPickupMode(pickupMode);
341  }
342  }
343 
348  public long getPickupMode() {
349  return pickupMode;
350  }
351 
357  public void setPickupMode(final long pickupMode, final boolean set) {
358  final long newPickupMode;
359  //noinspection IfMayBeConditional
360  if (set) {
361  newPickupMode = this.pickupMode|pickupMode;
362  } else {
363  newPickupMode = this.pickupMode&~pickupMode;
364  }
365  updatePickupMode(newPickupMode, true);
366  }
367 
368 }
final PickupOption cloak
Pickup mode: cloaks.
Definition: Pickup.java:141
final PickupOption magicalItem
Pickup mode: magical items.
Definition: Pickup.java:169
final PickupOption jewel
Pickup mode: rings and amulets.
Definition: Pickup.java:218
final PickupOption arrow
Pickup mode: arrows.
Definition: Pickup.java:99
final PickupOption boot
Pickup mode: boots.
Definition: Pickup.java:127
final PickupOption missileWeapon
Pickup mode: missile weapons.
Definition: Pickup.java:155
final PickupOption glove
Pickup mode: gloves.
Definition: Pickup.java:134
final PickupOption flesh
Pickup mode: flesh.
Definition: Pickup.java:225
void sendNcom(final boolean mustSend, @NotNull final String command)
Sends an "ncom" command to the server.
final PickupOption readable
Pickup mode: normal books and scrolls.
Definition: Pickup.java:197
static final long DEFAULT_PICKUP_MODE
The default pickup mode.
Definition: Pickup.java:38
final PickupOption notCursed
Pickup mode: ignore cursed items.
Definition: Pickup.java:211
final PickupOption magicDevice
Pickup mode: magic devices.
Definition: Pickup.java:204
final PickupOption skillscroll
Pickup mode: skillscrolls.
Definition: Pickup.java:190
long getPickupMode()
Returns the pickup mode.
Definition: Pickup.java:348
final PickupOption helmet
Pickup mode: helmets.
Definition: Pickup.java:106
final PickupOption bow
Pickup mode: bows.
Definition: Pickup.java:92
final PickupOption inhibit
Pickup mode: disable pickup.
Definition: Pickup.java:239
final PickupOption potion
Pickup mode: potions.
Definition: Pickup.java:176
final PickupOption valuables
Pickup mode: money and gems.
Definition: Pickup.java:85
Defines constants for pickup mode.
Definition: Pickup.java:33
void setPickupMode(final long pickupMode, final boolean set)
Sets or unsets the pickup mode.
Definition: Pickup.java:357
PickupOption newPickupOption(final long option, @NotNull final String tooltipText)
Creates a new PickupOption.
Definition: Pickup.java:319
final Collection< PickupOption > pickupOptions
All pickup options.
Definition: Pickup.java:64
static final long PU_RATIO
Pickup mode: mask for value/weight ratio.
Definition: Pickup.java:48
final PickupOption shield
Pickup mode: shields.
Definition: Pickup.java:113
final PickupOption meleeWeapon
Pickup mode: all weapons.
Definition: Pickup.java:162
static final long PU_NEW_MODE
Pickup mode: enable newpickup mode.
Definition: Pickup.java:58
final PickupOption key
Pickup mode: keys.
Definition: Pickup.java:148
final PickupOption container
Pickup mode: container.
Definition: Pickup.java:232
final PickupOption food
Pickup mode: food.
Definition: Pickup.java:71
A CheckBoxOption that toggles a pickup setting.
Maintains the pending (ncom) commands sent to the server.
static final long PU_DEBUG
Pickup mode: debug.
Definition: Pickup.java:53
final PickupOption drink
Pickup mode: drinks.
Definition: Pickup.java:78
static final long PU_NOTHING
Pickup mode: nothing.
Definition: Pickup.java:43
final CommandQueue commandQueue
The command queue for sending pickup commands.
Definition: Pickup.java:252
final PickupOption armor
Pickup mode: armors.
Definition: Pickup.java:120
void updatePickupMode(final long pickupMode, final boolean sendToServer)
Sets the pickup mode.
Definition: Pickup.java:331
final PickupOption spellbook
Pickup mode: spellbooks.
Definition: Pickup.java:183
final PickupOption stop
Pickup mode: stop before pickup.
Definition: Pickup.java:246