mirror of
https://github.com/2006-Scape/apollo.git
synced 2026-07-03 00:38:21 +00:00
Add support for dialogue interfaces; Change interface comments.
This commit is contained in:
@@ -22,9 +22,16 @@
|
||||
<event>
|
||||
<type>org.apollo.game.event.impl.ButtonEvent</type>
|
||||
<chain>
|
||||
<handler>org.apollo.game.event.handler.impl.DialogueButtonHandler</handler>
|
||||
<handler>org.apollo.game.event.handler.impl.BankButtonEventHandler</handler>
|
||||
</chain>
|
||||
</event>
|
||||
<event>
|
||||
<type>org.apollo.game.event.impl.DialogueContinueEvent</type>
|
||||
<chain>
|
||||
<handler>org.apollo.game.event.handler.impl.DialogueContinueEventHandler</handler>
|
||||
</chain>
|
||||
</event>
|
||||
<event>
|
||||
<type>org.apollo.game.event.impl.CommandEvent</type>
|
||||
<chain>
|
||||
|
||||
@@ -0,0 +1,27 @@
|
||||
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.ButtonEvent;
|
||||
import org.apollo.game.model.inter.InterfaceType;
|
||||
import org.apollo.game.model.Player;
|
||||
|
||||
/**
|
||||
* An {@link EventHandler} which intercepts button clicks on dialogues, and forwards the event to the current listener.
|
||||
*
|
||||
* @author Chris Fletcher
|
||||
*/
|
||||
public final class DialogueButtonHandler extends EventHandler<ButtonEvent> {
|
||||
|
||||
@Override
|
||||
public void handle(EventHandlerContext ctx, Player player, ButtonEvent event) {
|
||||
if (player.getInterfaceSet().contains(InterfaceType.DIALOGUE)) {
|
||||
boolean breakChain = player.getInterfaceSet().buttonClicked(event.getWidgetId());
|
||||
|
||||
if (breakChain) {
|
||||
ctx.breakHandlerChain();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,23 @@
|
||||
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.DialogueContinueEvent;
|
||||
import org.apollo.game.model.inter.InterfaceType;
|
||||
import org.apollo.game.model.Player;
|
||||
|
||||
/**
|
||||
* An {@link EventHandler} for the {@link DialogueContinueEvent}.
|
||||
*
|
||||
* @author Chris Fletcher
|
||||
*/
|
||||
public final class DialogueContinueEventHandler extends EventHandler<DialogueContinueEvent> {
|
||||
|
||||
@Override
|
||||
public void handle(EventHandlerContext ctx, Player player, DialogueContinueEvent event) {
|
||||
if (player.getInterfaceSet().contains(InterfaceType.DIALOGUE)) {
|
||||
player.getInterfaceSet().continueRequested();
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,36 @@
|
||||
package org.apollo.game.event.impl;
|
||||
|
||||
import org.apollo.game.event.Event;
|
||||
|
||||
/**
|
||||
* An {@link Event} that is sent by the client when the player clicks "Click here to continue" button on a dialogue
|
||||
* interface.
|
||||
*
|
||||
* @author Chris Fletcher
|
||||
*/
|
||||
public final class DialogueContinueEvent extends Event {
|
||||
|
||||
/**
|
||||
* The interface id.
|
||||
*/
|
||||
private final int interfaceId;
|
||||
|
||||
/**
|
||||
* Creates a new dialogue continue event.
|
||||
*
|
||||
* @param interfaceId The interface id.
|
||||
*/
|
||||
public DialogueContinueEvent(int interfaceId) {
|
||||
this.interfaceId = interfaceId;
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets the interface id of the button.
|
||||
*
|
||||
* @return The interface id.
|
||||
*/
|
||||
public int getInterfaceId() {
|
||||
return interfaceId;
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,35 @@
|
||||
package org.apollo.game.event.impl;
|
||||
|
||||
import org.apollo.game.event.Event;
|
||||
|
||||
/**
|
||||
* An {@link Event} that opens a dialogue interface (an interface that appears in the chat box).
|
||||
*
|
||||
* @author Chris Fletcher
|
||||
*/
|
||||
public final class OpenDialogueInterfaceEvent extends Event {
|
||||
|
||||
/**
|
||||
* The interface id.
|
||||
*/
|
||||
private final int interfaceId;
|
||||
|
||||
/**
|
||||
* Creates a new event with the specified interface id.
|
||||
*
|
||||
* @param interfaceId The interface id.
|
||||
*/
|
||||
public OpenDialogueInterfaceEvent(int interfaceId) {
|
||||
this.interfaceId = interfaceId;
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets the interface id.
|
||||
*
|
||||
* @return The interface id.
|
||||
*/
|
||||
public int getInterfaceId() {
|
||||
return interfaceId;
|
||||
}
|
||||
|
||||
}
|
||||
@@ -3,7 +3,7 @@ package org.apollo.game.event.impl;
|
||||
import org.apollo.game.event.Event;
|
||||
|
||||
/**
|
||||
* An event which opens an interface.
|
||||
* An {@link Event} that opens an interface.
|
||||
*
|
||||
* @author Graham
|
||||
*/
|
||||
|
||||
@@ -5,9 +5,11 @@ import java.util.Map;
|
||||
|
||||
import org.apollo.game.event.impl.CloseInterfaceEvent;
|
||||
import org.apollo.game.event.impl.EnterAmountEvent;
|
||||
import org.apollo.game.event.impl.OpenDialogueInterfaceEvent;
|
||||
import org.apollo.game.event.impl.OpenInterfaceEvent;
|
||||
import org.apollo.game.event.impl.OpenInterfaceSidebarEvent;
|
||||
import org.apollo.game.model.Player;
|
||||
import org.apollo.game.model.inter.dialogue.DialogueListener;
|
||||
|
||||
/**
|
||||
* Represents the set of interfaces the player has open.
|
||||
@@ -34,10 +36,15 @@ public final class InterfaceSet {
|
||||
*/
|
||||
private EnterAmountListener amountListener;
|
||||
|
||||
/**
|
||||
* The current chat box dialogue listener.
|
||||
*/
|
||||
private DialogueListener dialogueListener;
|
||||
|
||||
/**
|
||||
* A map of open interfaces.
|
||||
*/
|
||||
private Map<InterfaceType, Integer> interfaces = new HashMap<InterfaceType, Integer>();
|
||||
private Map<InterfaceType, Integer> interfaces = new HashMap<>();
|
||||
|
||||
/**
|
||||
* The current listener.
|
||||
@@ -58,6 +65,19 @@ public final class InterfaceSet {
|
||||
this.player = player;
|
||||
}
|
||||
|
||||
/**
|
||||
* Called when the player has clicked the specified button. Notifies the current dialogue listener.
|
||||
*
|
||||
* @param button The button.
|
||||
* @return {@code true} if the event handler chain should be broken.
|
||||
*/
|
||||
public boolean buttonClicked(int button) {
|
||||
if (dialogueListener != null) {
|
||||
return dialogueListener.buttonClicked(button);
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
/**
|
||||
* Closes the current open interface(s).
|
||||
*/
|
||||
@@ -70,7 +90,8 @@ public final class InterfaceSet {
|
||||
* An internal method for closing the interface, notifying the listener if appropriate, but not sending any events.
|
||||
*/
|
||||
private void closeAndNotify() {
|
||||
amountListener = null; // TODO should we notify??
|
||||
amountListener = null;
|
||||
dialogueListener = null;
|
||||
|
||||
interfaces.clear();
|
||||
if (listener != null) {
|
||||
@@ -89,6 +110,25 @@ public final class InterfaceSet {
|
||||
return interfaces.containsValue(id);
|
||||
}
|
||||
|
||||
/**
|
||||
* Checks if this interface set contains the specified interface type.
|
||||
*
|
||||
* @param type The interface's type.
|
||||
* @return {@code true} if so, {@code false} if not.
|
||||
*/
|
||||
public boolean contains(InterfaceType type) {
|
||||
return interfaces.containsKey(type);
|
||||
}
|
||||
|
||||
/**
|
||||
* Called when the player has clicked the "Click here to continue" button on a dialogue.
|
||||
*/
|
||||
public void continueRequested() {
|
||||
if (dialogueListener != null) {
|
||||
dialogueListener.continued();
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Called when the client has entered the specified amount. Notifies the current listener.
|
||||
*
|
||||
@@ -108,6 +148,31 @@ public final class InterfaceSet {
|
||||
closeAndNotify();
|
||||
}
|
||||
|
||||
/**
|
||||
* Opens a chat box dialogue.
|
||||
*
|
||||
* @param listener The listener for the dialogue.
|
||||
* @param dialogueId The dialogue's id.
|
||||
*/
|
||||
public void openDialogue(DialogueListener listener, int dialogueId) {
|
||||
closeAndNotify();
|
||||
|
||||
this.dialogueListener = listener;
|
||||
this.listener = listener;
|
||||
|
||||
interfaces.put(InterfaceType.DIALOGUE, dialogueId);
|
||||
player.send(new OpenDialogueInterfaceEvent(dialogueId));
|
||||
}
|
||||
|
||||
/**
|
||||
* Opens a chat box dialogue.
|
||||
*
|
||||
* @param dialogueId The dialogue's id.
|
||||
*/
|
||||
public void openDialogue(int dialogueId) {
|
||||
openDialogue(null, dialogueId);
|
||||
}
|
||||
|
||||
/**
|
||||
* Opens the enter amount dialog.
|
||||
*
|
||||
|
||||
@@ -0,0 +1,25 @@
|
||||
package org.apollo.game.model.inter.dialogue;
|
||||
|
||||
/**
|
||||
* An adapter for the {@link DialogueListener}.
|
||||
*
|
||||
* @author Chris Fletcher
|
||||
*/
|
||||
public abstract class DialogueAdapter implements DialogueListener {
|
||||
|
||||
@Override
|
||||
public boolean buttonClicked(int button) {
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void continued() {
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void interfaceClosed() {
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,29 @@
|
||||
package org.apollo.game.model.inter.dialogue;
|
||||
|
||||
import org.apollo.game.model.inter.InterfaceListener;
|
||||
|
||||
/**
|
||||
* An {@link InterfaceListener} that listens for dialogue-specific events (e.g. clicking buttons).
|
||||
*
|
||||
* @author Chris Fletcher
|
||||
*/
|
||||
public interface DialogueListener extends InterfaceListener {
|
||||
|
||||
/**
|
||||
* Called when the player has clicked the specified button.
|
||||
* <p>
|
||||
* Note that this method is invoked when any button is clicked whilst the dialogue is opened. In case the button is
|
||||
* not being handled by this listener, simply return {@code false} to allow further processing of the event.
|
||||
* </p>
|
||||
*
|
||||
* @param button The button interface id.
|
||||
* @return {@code true} if the event handler chain should be broken, {@code false} if it should be continued.
|
||||
*/
|
||||
public boolean buttonClicked(int button);
|
||||
|
||||
/**
|
||||
* Called when the player has clicked the "Click here to continue" button on a chatting dialogue.
|
||||
*/
|
||||
public void continued();
|
||||
|
||||
}
|
||||
@@ -0,0 +1,4 @@
|
||||
/**
|
||||
* Contains dialogue-related classes.
|
||||
*/
|
||||
package org.apollo.game.model.inter.dialogue;
|
||||
@@ -0,0 +1,23 @@
|
||||
package org.apollo.net.release.r317;
|
||||
|
||||
import org.apollo.game.event.impl.DialogueContinueEvent;
|
||||
import org.apollo.net.codec.game.DataType;
|
||||
import org.apollo.net.codec.game.GamePacket;
|
||||
import org.apollo.net.codec.game.GamePacketReader;
|
||||
import org.apollo.net.release.EventDecoder;
|
||||
|
||||
/**
|
||||
* An {@link EventDecoder} for the {@link DialogueContinueEvent}.
|
||||
*
|
||||
* @author Chris Fletcher
|
||||
*/
|
||||
final class DialogueContinueEventDecoder extends EventDecoder<DialogueContinueEvent> {
|
||||
|
||||
@Override
|
||||
public DialogueContinueEvent decode(GamePacket packet) {
|
||||
GamePacketReader reader = new GamePacketReader(packet);
|
||||
int interfaceId = (int) reader.getUnsigned(DataType.SHORT);
|
||||
return new DialogueContinueEvent(interfaceId);
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,24 @@
|
||||
package org.apollo.net.release.r317;
|
||||
|
||||
import org.apollo.game.event.impl.OpenDialogueInterfaceEvent;
|
||||
import org.apollo.net.codec.game.DataOrder;
|
||||
import org.apollo.net.codec.game.DataType;
|
||||
import org.apollo.net.codec.game.GamePacket;
|
||||
import org.apollo.net.codec.game.GamePacketBuilder;
|
||||
import org.apollo.net.release.EventEncoder;
|
||||
|
||||
/**
|
||||
* An {@link EventEncoder} for the {@link OpenDialogueInterfaceEvent}.
|
||||
*
|
||||
* @author Chris Fletcher
|
||||
*/
|
||||
public final class OpenDialogueInterfaceEventEncoder extends EventEncoder<OpenDialogueInterfaceEvent> {
|
||||
|
||||
@Override
|
||||
public GamePacket encode(OpenDialogueInterfaceEvent event) {
|
||||
GamePacketBuilder builder = new GamePacketBuilder(164);
|
||||
builder.put(DataType.SHORT, DataOrder.LITTLE, event.getInterfaceId());
|
||||
return builder.toGamePacket();
|
||||
}
|
||||
|
||||
}
|
||||
@@ -10,6 +10,7 @@ import org.apollo.game.event.impl.IdAssignmentEvent;
|
||||
import org.apollo.game.event.impl.IgnoreListEvent;
|
||||
import org.apollo.game.event.impl.LogoutEvent;
|
||||
import org.apollo.game.event.impl.NpcSynchronizationEvent;
|
||||
import org.apollo.game.event.impl.OpenDialogueInterfaceEvent;
|
||||
import org.apollo.game.event.impl.OpenInterfaceEvent;
|
||||
import org.apollo.game.event.impl.OpenInterfaceSidebarEvent;
|
||||
import org.apollo.game.event.impl.PlayerSynchronizationEvent;
|
||||
@@ -133,6 +134,7 @@ public final class Release317 extends Release {
|
||||
register(155, new SecondNpcActionEventDecoder());
|
||||
register(17, new ThirdNpcActionEventDecoder());
|
||||
register(236, new TakeTileItemEventDecoder());
|
||||
register(40, new DialogueContinueEventDecoder());
|
||||
|
||||
register(188, new AddFriendEventDecoder());
|
||||
register(133, new AddIgnoreEventDecoder());
|
||||
@@ -167,6 +169,7 @@ public final class Release317 extends Release {
|
||||
register(PositionEvent.class, new PositionEventEncoder());
|
||||
register(UpdateRunEnergyEvent.class, new UpdateRunEnergyEventEncoder());
|
||||
register(PrivacyOptionEvent.class, new PrivacyOptionEventEncoder());
|
||||
register(OpenDialogueInterfaceEvent.class, new OpenDialogueInterfaceEventEncoder());
|
||||
|
||||
register(ForwardPrivateMessageEvent.class, new ForwardPrivateMessageEventEncoder());
|
||||
register(FriendServerStatusEvent.class, new FriendServerStatusEventEncoder());
|
||||
|
||||
@@ -0,0 +1,23 @@
|
||||
package org.apollo.net.release.r377;
|
||||
|
||||
import org.apollo.game.event.impl.DialogueContinueEvent;
|
||||
import org.apollo.net.codec.game.DataType;
|
||||
import org.apollo.net.codec.game.GamePacket;
|
||||
import org.apollo.net.codec.game.GamePacketReader;
|
||||
import org.apollo.net.release.EventDecoder;
|
||||
|
||||
/**
|
||||
* An {@link EventDecoder} for the {@link DialogueContinueEvent}.
|
||||
*
|
||||
* @author Chris Fletcher
|
||||
*/
|
||||
final class DialogueContinueEventDecoder extends EventDecoder<DialogueContinueEvent> {
|
||||
|
||||
@Override
|
||||
public DialogueContinueEvent decode(GamePacket packet) {
|
||||
GamePacketReader reader = new GamePacketReader(packet);
|
||||
int interfaceId = (int) reader.getUnsigned(DataType.SHORT);
|
||||
return new DialogueContinueEvent(interfaceId);
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,23 @@
|
||||
package org.apollo.net.release.r377;
|
||||
|
||||
import org.apollo.game.event.impl.OpenDialogueInterfaceEvent;
|
||||
import org.apollo.net.codec.game.DataType;
|
||||
import org.apollo.net.codec.game.GamePacket;
|
||||
import org.apollo.net.codec.game.GamePacketBuilder;
|
||||
import org.apollo.net.release.EventEncoder;
|
||||
|
||||
/**
|
||||
* An {@link EventEncoder} for the {@link OpenDialogueInterfaceEvent}.
|
||||
*
|
||||
* @author Chris Fletcher
|
||||
*/
|
||||
public final class OpenDialogueInterfaceEventEncoder extends EventEncoder<OpenDialogueInterfaceEvent> {
|
||||
|
||||
@Override
|
||||
public GamePacket encode(OpenDialogueInterfaceEvent event) {
|
||||
GamePacketBuilder builder = new GamePacketBuilder(109);
|
||||
builder.put(DataType.SHORT, event.getInterfaceId());
|
||||
return builder.toGamePacket();
|
||||
}
|
||||
|
||||
}
|
||||
@@ -10,6 +10,7 @@ import org.apollo.game.event.impl.IdAssignmentEvent;
|
||||
import org.apollo.game.event.impl.IgnoreListEvent;
|
||||
import org.apollo.game.event.impl.LogoutEvent;
|
||||
import org.apollo.game.event.impl.NpcSynchronizationEvent;
|
||||
import org.apollo.game.event.impl.OpenDialogueInterfaceEvent;
|
||||
import org.apollo.game.event.impl.OpenInterfaceEvent;
|
||||
import org.apollo.game.event.impl.OpenInterfaceSidebarEvent;
|
||||
import org.apollo.game.event.impl.PlayerSynchronizationEvent;
|
||||
@@ -130,6 +131,7 @@ public final class Release377 extends Release {
|
||||
register(112, new SecondNpcActionEventDecoder());
|
||||
register(13, new ThirdNpcActionEventDecoder());
|
||||
register(71, new TakeTileItemEventDecoder());
|
||||
register(226, new DialogueContinueEventDecoder());
|
||||
|
||||
register(120, new AddFriendEventDecoder());
|
||||
register(217, new AddIgnoreEventDecoder());
|
||||
@@ -164,6 +166,7 @@ public final class Release377 extends Release {
|
||||
register(PositionEvent.class, new PositionEventEncoder());
|
||||
register(UpdateRunEnergyEvent.class, new UpdateRunEnergyEventEncoder());
|
||||
register(PrivacyOptionEvent.class, new PrivacyOptionEventEncoder());
|
||||
register(OpenDialogueInterfaceEvent.class, new OpenDialogueInterfaceEventEncoder());
|
||||
|
||||
register(ForwardPrivateMessageEvent.class, new ForwardPrivateMessageEventEncoder());
|
||||
register(FriendServerStatusEvent.class, new FriendServerStatusEventEncoder());
|
||||
|
||||
Reference in New Issue
Block a user