Change interface management (see commit notes).

This commit is contained in:
Major-
2013-11-03 19:16:51 +00:00
parent e6bf527dff
commit 43c5a23851
18 changed files with 171 additions and 128 deletions
+2 -9
View File
@@ -2,16 +2,9 @@ WALK_BUTTON_ID = 152
RUN_BUTTON_ID = 153
on :button, WALK_BUTTON_ID do |player|
player.running = false
player.toggle_running
end
on :button, RUN_BUTTON_ID do |player|
player.running = true
end
on :command, :run do |player, command|
running = player.is_running
player.running = !running
player.send_message(running ? "You are now running." : "You are no longer running.")
player.toggle_running
end
+10 -10
View File
@@ -33,12 +33,12 @@ public final class IsaacRandom {
/**
* The log of the size of the result and memory arrays.
*/
private static final int SIZEL = 8;
private static final int LOG_SIZE = 8;
/**
* The size of the result and memory arrays.
*/
private static final int SIZE = 1 << SIZEL;
private static final int SIZE = 1 << LOG_SIZE;
/**
* A mask for pseudorandom lookup.
@@ -241,25 +241,25 @@ public final class IsaacRandom {
a ^= a << 13;
a += mem[j++];
mem[i] = y = mem[(x & MASK) >> 2] + a + b;
rsl[i++] = b = mem[(y >> SIZEL & MASK) >> 2] + x;
rsl[i++] = b = mem[(y >> LOG_SIZE & MASK) >> 2] + x;
x = mem[i];
a ^= a >>> 6;
a += mem[j++];
mem[i] = y = mem[(x & MASK) >> 2] + a + b;
rsl[i++] = b = mem[(y >> SIZEL & MASK) >> 2] + x;
rsl[i++] = b = mem[(y >> LOG_SIZE & MASK) >> 2] + x;
x = mem[i];
a ^= a << 2;
a += mem[j++];
mem[i] = y = mem[(x & MASK) >> 2] + a + b;
rsl[i++] = b = mem[(y >> SIZEL & MASK) >> 2] + x;
rsl[i++] = b = mem[(y >> LOG_SIZE & MASK) >> 2] + x;
x = mem[i];
a ^= a >>> 16;
a += mem[j++];
mem[i] = y = mem[(x & MASK) >> 2] + a + b;
rsl[i++] = b = mem[(y >> SIZEL & MASK) >> 2] + x;
rsl[i++] = b = mem[(y >> LOG_SIZE & MASK) >> 2] + x;
}
for (j = 0; j < SIZE / 2;) {
@@ -267,25 +267,25 @@ public final class IsaacRandom {
a ^= a << 13;
a += mem[j++];
mem[i] = y = mem[(x & MASK) >> 2] + a + b;
rsl[i++] = b = mem[(y >> SIZEL & MASK) >> 2] + x;
rsl[i++] = b = mem[(y >> LOG_SIZE & MASK) >> 2] + x;
x = mem[i];
a ^= a >>> 6;
a += mem[j++];
mem[i] = y = mem[(x & MASK) >> 2] + a + b;
rsl[i++] = b = mem[(y >> SIZEL & MASK) >> 2] + x;
rsl[i++] = b = mem[(y >> LOG_SIZE & MASK) >> 2] + x;
x = mem[i];
a ^= a << 2;
a += mem[j++];
mem[i] = y = mem[(x & MASK) >> 2] + a + b;
rsl[i++] = b = mem[(y >> SIZEL & MASK) >> 2] + x;
rsl[i++] = b = mem[(y >> LOG_SIZE & MASK) >> 2] + x;
x = mem[i];
a ^= a >>> 16;
a += mem[j++];
mem[i] = y = mem[(x & MASK) >> 2] + a + b;
rsl[i++] = b = mem[(y >> SIZEL & MASK) >> 2] + x;
rsl[i++] = b = mem[(y >> LOG_SIZE & MASK) >> 2] + x;
}
}
+1 -1
View File
@@ -46,4 +46,4 @@ public final class Command {
return name;
}
}
}
@@ -39,7 +39,7 @@ public final class CommandDispatcher {
}
/**
* Registers a listener with the
* Registers a listener with the dispatcher.
*
* @param command The command's name.
* @param listener The listener.
@@ -48,4 +48,4 @@ public final class CommandDispatcher {
listeners.put(command.toLowerCase(), listener);
}
}
}
@@ -17,4 +17,4 @@ public interface CommandListener {
*/
public void execute(Player player, Command command);
}
}
@@ -1,11 +1,11 @@
package org.apollo.game.command;
import java.util.Iterator;
import java.util.ArrayList;
import java.util.List;
import java.util.Set;
import org.apollo.game.event.impl.SetWidgetTextEvent;
import org.apollo.game.model.Player;
import org.apollo.game.model.World;
import org.apollo.game.model.inter.quest.QuestConstants;
import org.apollo.util.plugin.PluginManager;
/**
@@ -27,36 +27,26 @@ public final class CreditsCommandListener implements CommandListener {
@Override
public void execute(Player player, Command command) {
PluginManager mgr = World.getWorld().getPluginManager();
Iterator<String> it = mgr.createAuthorsIterator();
final Set<String> authors = mgr.getAuthors();
int pos = 0;
player.send(new SetWidgetTextEvent(QuestConstants.QUEST_TEXT[pos++], "@dre@Apollo"));
player.send(new SetWidgetTextEvent(QuestConstants.QUEST_TEXT[pos++], "@dre@Introduction"));
player.send(new SetWidgetTextEvent(QuestConstants.QUEST_TEXT[pos++], ""));
player.send(new SetWidgetTextEvent(QuestConstants.QUEST_TEXT[pos++],
"This server is based on Apollo, a lightweight, fast, secure"));
player.send(new SetWidgetTextEvent(QuestConstants.QUEST_TEXT[pos++],
"and open-source RuneScape emulator. For more"));
player.send(new SetWidgetTextEvent(QuestConstants.QUEST_TEXT[pos++],
"information about Apollo, visit the website at:"));
player.send(new SetWidgetTextEvent(QuestConstants.QUEST_TEXT[pos++],
"@dbl@https://github.com/apollo-rsps/apollo"));
player.send(new SetWidgetTextEvent(QuestConstants.QUEST_TEXT[pos++], ""));
player.send(new SetWidgetTextEvent(QuestConstants.QUEST_TEXT[pos++],
"Apollo is released under the terms of the ISC"));
player.send(new SetWidgetTextEvent(QuestConstants.QUEST_TEXT[pos++],
"license, details can be found in the root folder of the "));
player.send(new SetWidgetTextEvent(QuestConstants.QUEST_TEXT[pos++], "Apollo distribution."));
player.send(new SetWidgetTextEvent(QuestConstants.QUEST_TEXT[pos++], ""));
player.send(new SetWidgetTextEvent(QuestConstants.QUEST_TEXT[pos++], "@dre@Credits"));
player.send(new SetWidgetTextEvent(QuestConstants.QUEST_TEXT[pos++], ""));
List<String> text = new ArrayList<String>(14 + authors.size());
text.add("@dre@Apollo");
text.add("@dre@Introduction");
text.add("");
text.add("This server is based on Apollo, a lightweight, fast, secure");
text.add("and open-source RuneScape emulator. For more");
text.add("information about Apollo, visit the website at:");
text.add("@dbl@https://github.com/apollo-rsps/apollo");
text.add("");
text.add("Apollo is released under the terms of the ISC");
text.add("license, details can be found in the root folder of the");
text.add("Apollo distribution.");
text.add("");
text.add("@dre@Credits");
text.add("");
text.addAll(authors);
for (; pos < QuestConstants.QUEST_TEXT.length; pos++) {
String text = it.hasNext() ? it.next() : "";
player.send(new SetWidgetTextEvent(QuestConstants.QUEST_TEXT[pos], text));
}
player.getInterfaceSet().openWindow(QuestConstants.QUEST_INTERFACE);
player.sendQuestInterface(text);
}
}
@@ -39,4 +39,4 @@ public abstract class PrivilegedCommandListener implements CommandListener {
*/
public abstract void executePrivileged(Player player, Command command);
}
}
@@ -5,9 +5,9 @@ import org.apollo.game.event.handler.EventHandlerContext;
import org.apollo.game.event.impl.InventoryItemEvent;
import org.apollo.game.model.Inventory;
import org.apollo.game.model.Item;
import org.apollo.game.model.Player;
import org.apollo.game.model.inter.bank.BankConstants;
import org.apollo.game.model.inv.SynchronizationInventoryListener;
import org.apollo.game.model.Player;
/**
* An {@link EventHandler} which verifies {@link InventoryItemEvent}s.
@@ -3,9 +3,9 @@ package org.apollo.game.event.handler.impl;
import org.apollo.game.event.handler.EventHandler;
import org.apollo.game.event.handler.EventHandlerContext;
import org.apollo.game.event.impl.WalkEvent;
import org.apollo.game.model.Player;
import org.apollo.game.model.Position;
import org.apollo.game.model.WalkingQueue;
import org.apollo.game.model.Player;
/**
* A handler for the {@link WalkEvent}.
@@ -7,16 +7,16 @@ package org.apollo.game.event.impl;
*/
public final class ItemOnItemEvent extends InventoryItemEvent {
/**
* The interface id of the target item.
*/
private final int targetInterface;
/**
* The id of the target item.
*/
private final int targetId;
/**
* The interface id of the target item.
*/
private final int targetInterface;
/**
* The slot of the target item.
*/
@@ -40,15 +40,6 @@ public final class ItemOnItemEvent extends InventoryItemEvent {
this.targetId = targetId;
}
/**
* Gets the interface id of the target item.
*
* @return The target item's interface id.
*/
public int getTargetInterfaceId() {
return targetInterface;
}
/**
* Gets the id of the target item.
*
@@ -58,6 +49,15 @@ public final class ItemOnItemEvent extends InventoryItemEvent {
return targetId;
}
/**
* Gets the interface id of the target item.
*
* @return The target item's interface id.
*/
public int getTargetInterfaceId() {
return targetInterface;
}
/**
* Gets the slot of the target item.
*
@@ -1,11 +1,25 @@
package org.apollo.game.model.inter.quest;
package org.apollo.game.model;
/**
* Contains quest-related constants.
* Contains interface-related constants.
*
* @author Graham
* @author Major
*/
public final class QuestConstants {
public class InterfaceConstants {
/**
* The character design interface id.
*/
public static final int CHARACTER_DESIGN = 3559;
/**
* The default inventory tab ids.
*/
public static final int[] DEFAULT_INVENTORY_TABS = { 2423, 3917, 638, 3213, 1644, 5608, 1151, -1, 5065, 5715, 2449,
904, 147, 962, };
// 6299 = music tab, music disabled
// 4445 = settings tab, music disabled
// 12855 = ancients magic
/**
* The quest interface id.
@@ -13,12 +27,17 @@ public final class QuestConstants {
public static final int QUEST_INTERFACE = 8134;
/**
* The part of the quest interface that contains the scroll bar.
* The scroll bar widget.
*/
public static final int QUEST_SCROLL_PANE = 8143; // 8144 = title
public static final int QUEST_SCROLL_PANE = 8143;
/**
* The array of sub interfaces which display the text.
* The quest title widget id.
*/
public static final int QUEST_TITLE = 8144;
/**
* The array of widgets that display the text.
*/
public static final int[] QUEST_TEXT = { 8144, 8145, 8147, 8148, 8149, 8150, 8151, 8152, 8153, 8154, 8155, 8156,
8157, 8158, 8159, 8160, 8161, 8162, 8163, 8164, 8165, 8166, 8167, 8168, 8169, 8170, 8171, 8172, 8173, 8174,
@@ -28,11 +47,4 @@ public final class QuestConstants {
12201, 12202, 12203, 12204, 12205, 12206, 12207, 12208, 12209, 12210, 12211, 12212, 12213, 12214, 12215,
12216, 12217, 12218, 12219, 12220, 12221, 12222, 12223 };
/**
* Default private constructor to prevent instantiation.
*/
private QuestConstants() {
}
}
}
+10 -2
View File
@@ -36,7 +36,6 @@ public final class InterfaceSet {
*/
private EnterAmountListener amountListener;
// TODO: maybe store the current inventory tab ids here??
/**
* A map of open interfaces.
*/
@@ -174,4 +173,13 @@ public final class InterfaceSet {
player.send(new OpenInterfaceSidebarEvent(windowId, sidebarId));
}
}
/**
* Gets the size of the interface set.
*
* @return The size.
*/
public int size() {
return interfaces.size();
}
}
+1 -1
View File
@@ -38,4 +38,4 @@ public enum InterfaceType {
*/
WINDOW;
}
}
+59 -23
View File
@@ -1,12 +1,15 @@
package org.apollo.game.model;
import java.util.ArrayDeque;
import java.util.List;
import java.util.Queue;
import org.apollo.game.event.Event;
import org.apollo.game.event.impl.ConfigEvent;
import org.apollo.game.event.impl.IdAssignmentEvent;
import org.apollo.game.event.impl.LogoutEvent;
import org.apollo.game.event.impl.ServerMessageEvent;
import org.apollo.game.event.impl.SetWidgetTextEvent;
import org.apollo.game.event.impl.SwitchTabInterfaceEvent;
import org.apollo.game.model.inter.bank.BankConstants;
import org.apollo.game.model.inv.AppearanceInventoryListener;
@@ -105,6 +108,11 @@ public final class Player extends Character {
*/
private boolean designedCharacter = false;
/**
* The player's run energy.
*/
private int runEnergy = 100;
/**
* A flag which indicates there are npcs that couldn't be added.
*/
@@ -173,7 +181,7 @@ public final class Player extends Character {
/**
* A flag indicating if the player is withdrawing items as notes.
*/
private boolean withdrawingNotes = false; // TODO find a better place!
private boolean withdrawingNotes = false;
/**
* Creates the {@link Player}.
@@ -191,7 +199,7 @@ public final class Player extends Character {
* Decrements this player's viewing distance if it is greater than 1.
*/
public void decrementViewingDistance() {
if (viewingDistance > 1) { // TODO should it be 0?
if (viewingDistance > 1) {
viewingDistance--;
}
}
@@ -496,27 +504,19 @@ public final class Player extends Character {
send(new IdAssignmentEvent(getIndex(), members)); // TODO should this be sent when we reconnect?
sendMessage("Welcome to RuneScape.");
// character design screen
if (!designedCharacter) {
interfaceSet.openWindow(3559); // TODO make the interface id a constant or something?
interfaceSet.openWindow(InterfaceConstants.CHARACTER_DESIGN);
}
// tabs TODO make a constant? look at player settings
int[] tabs = {
// 6299 = music tab, music disabled
// 4445 = settings tab, music disabled
// 12855 = ancients magic
2423, 3917, 638, 3213, 1644, 5608, 1151, -1, 5065, 5715, 2449, 904, 147, 962, };
int[] tabs = InterfaceConstants.DEFAULT_INVENTORY_TABS;
for (int i = 0; i < tabs.length; i++) {
send(new SwitchTabInterfaceEvent(i, tabs[i]));
}
// force inventories to update
getInventory().forceRefresh();
getEquipment().forceRefresh();
getBank().forceRefresh();
// force skills to update
getSkillSet().forceRefresh();
}
@@ -529,6 +529,23 @@ public final class Player extends Character {
send(new ServerMessageEvent(message));
}
/**
* Sends the quest interface
*
* @param text The text to display on the interface.
*/
public void sendQuestInterface(List<String> text) {
int size = text.size(), lines = InterfaceConstants.QUEST_TEXT.length;
if (size > lines) {
throw new IllegalArgumentException("List contains too much text for the interface.");
}
for (int pos = 0; pos < lines; pos++) {
send(new SetWidgetTextEvent(InterfaceConstants.QUEST_TEXT[pos], pos < size ? text.get(pos) : ""));
}
interfaceSet.openWindow(InterfaceConstants.QUEST_INTERFACE);
}
/**
* Sets the player's appearance.
*
@@ -602,16 +619,6 @@ public final class Player extends Character {
this.regionChanged = regionChanged;
}
/**
* Sets whether the running toggle is enabled.
*
* @param running The toggle.
*/
public void setRunning(boolean running) {
this.running = running;
getWalkingQueue().setRunningQueue(running);
}
/**
* Sets the player's {@link GameSession}.
*
@@ -638,7 +645,18 @@ public final class Player extends Character {
@Override
public void teleport(Position position) {
super.teleport(position); // TODO put this in the same place as Character#teleport and WalkEventHandler!!
interfaceSet.close(); // TODO: should this be done if size == 0?
if (interfaceSet.size() > 0) {
interfaceSet.close();
}
}
/**
* Toggles whether the player is running or not.
*/
public void toggleRunning() {
running = !running;
getWalkingQueue().setRunningQueue(running);
send(new ConfigEvent(173, running ? 1 : 0));
}
@Override
@@ -647,4 +665,22 @@ public final class Player extends Character {
+ privilegeLevel + "]";
}
/**
* Gets the player's run energy.
*
* @return The run energy.
*/
public int getRunEnergy() {
return runEnergy;
}
/**
* Sets the player's run energy.
*
* @param runEnergy The energy.
*/
public void setRunEnergy(int runEnergy) {
this.runEnergy = runEnergy;
}
}
@@ -1,5 +0,0 @@
/**
* Contains classes related to the quest interfaces.
*/
package org.apollo.game.model.inter.quest;
@@ -75,29 +75,34 @@ public final class Release317 extends Release {
*/
private void init() {
// register decoders
register(0, new KeepAliveEventDecoder());
register(101, new CharacterDesignEventDecoder());
WalkEventDecoder walkEventDecoder = new WalkEventDecoder();
register(248, walkEventDecoder);
register(164, walkEventDecoder);
register(98, walkEventDecoder);
register(0, new KeepAliveEventDecoder());
register(101, new CharacterDesignEventDecoder());
register(4, new ChatEventDecoder());
register(185, new ButtonEventDecoder());
register(103, new CommandEventDecoder());
register(214, new SwitchItemEventDecoder());
register(132, new FirstObjectActionEventDecoder());
register(252, new SecondObjectActionEventDecoder());
register(70, new ThirdObjectActionEventDecoder());
register(122, new FirstItemOptionEventDecoder());
register(41, new SecondItemOptionEventDecoder());
register(16, new ThirdItemOptionEventDecoder());
register(75, new FourthItemOptionEventDecoder());
register(87, new FifthItemOptionEventDecoder());
register(145, new FirstItemActionEventDecoder());
register(117, new SecondItemActionEventDecoder());
register(43, new ThirdItemActionEventDecoder());
register(129, new FourthItemActionEventDecoder());
register(135, new FifthItemActionEventDecoder());
register(185, new ButtonEventDecoder());
register(130, new ClosedInterfaceEventDecoder());
register(208, new EnteredAmountEventDecoder());
register(53, new ItemOnItemEventDecoder());
@@ -75,29 +75,34 @@ public final class Release377 extends Release {
*/
private void init() {
// register decoders
register(248, new KeepAliveEventDecoder());
register(163, new CharacterDesignEventDecoder());
WalkEventDecoder walkEventDecoder = new WalkEventDecoder();
register(213, walkEventDecoder);
register(28, walkEventDecoder);
register(247, walkEventDecoder);
register(248, new KeepAliveEventDecoder());
register(163, new CharacterDesignEventDecoder());
register(49, new ChatEventDecoder());
register(79, new ButtonEventDecoder());
register(56, new CommandEventDecoder());
register(123, new SwitchItemEventDecoder());
register(181, new FirstObjectActionEventDecoder());
register(241, new SecondObjectActionEventDecoder());
register(50, new ThirdObjectActionEventDecoder());
register(203, new FirstItemOptionEventDecoder());
register(24, new SecondItemOptionEventDecoder());
register(161, new ThirdItemOptionEventDecoder());
register(228, new FourthItemOptionEventDecoder());
register(4, new FifthItemOptionEventDecoder());
register(3, new FirstItemActionEventDecoder());
register(177, new SecondItemActionEventDecoder());
register(91, new ThirdItemActionEventDecoder());
register(231, new FourthItemActionEventDecoder());
register(158, new FifthItemActionEventDecoder());
register(79, new ButtonEventDecoder());
register(110, new ClosedInterfaceEventDecoder());
register(75, new EnteredAmountEventDecoder());
register(1, new ItemOnItemEventDecoder());
@@ -9,7 +9,6 @@ import java.util.Collection;
import java.util.Collections;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Iterator;
import java.util.Map;
import java.util.Set;
import java.util.SortedSet;
@@ -46,12 +45,12 @@ public final class PluginManager {
}
/**
* Creates an iterator for the set of authors.
* Creates an unmodifiable {@link Set} containing the authors.
*
* @return The iterator.
* @return The set.
*/
public Iterator<String> createAuthorsIterator() {
return authors.iterator();
public Set<String> getAuthors() {
return Collections.unmodifiableSortedSet(authors);
}
/**