Fix HelpCommand not working without static CommandsExecutor
This commit is contained in:
@@ -14,9 +14,9 @@ var staff_heading = "!";
|
|||||||
var levels = ["Common", "Donator", "JrGM", "GM", "SuperGM", "Developer", "Admin"];
|
var levels = ["Common", "Donator", "JrGM", "GM", "SuperGM", "Developer", "Admin"];
|
||||||
var commands;
|
var commands;
|
||||||
|
|
||||||
|
// Expectation: "ce" bound to an instance of java.client.command.CommandsExecutor
|
||||||
function writeHeavenMSCommands() {
|
function writeHeavenMSCommands() {
|
||||||
const CommandsExecutor = Java.type('client.command.CommandsExecutor');
|
commands = ce.getGmCommands();
|
||||||
commands = CommandsExecutor.getInstance().getGmCommands(); // TODO: fix. CommandsExecutor is now injected rather than being a singleton, so this does not work anymore.
|
|
||||||
}
|
}
|
||||||
|
|
||||||
function start() {
|
function start() {
|
||||||
|
|||||||
@@ -6,5 +6,9 @@ import server.shop.ShopFactory;
|
|||||||
/**
|
/**
|
||||||
* @author Ponk
|
* @author Ponk
|
||||||
*/
|
*/
|
||||||
public record CommandContext(DropProvider dropProvider, ShopFactory shopFactory) {
|
public record CommandContext(CommandsExecutor commandsExecutor, DropProvider dropProvider, ShopFactory shopFactory) {
|
||||||
|
|
||||||
|
public CommandContext with(CommandsExecutor ce) {
|
||||||
|
return new CommandContext(ce, this.dropProvider, this.shopFactory);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -52,7 +52,7 @@ public class CommandsExecutor {
|
|||||||
private Pair<List<String>, List<String>> levelCommandsCursor;
|
private Pair<List<String>, List<String>> levelCommandsCursor;
|
||||||
|
|
||||||
public CommandsExecutor(CommandContext commandContext) {
|
public CommandsExecutor(CommandContext commandContext) {
|
||||||
this.commandContext = commandContext;
|
this.commandContext = commandContext.with(this);
|
||||||
registerCommands();
|
registerCommands();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -28,6 +28,8 @@ import client.command.Command;
|
|||||||
import client.command.CommandContext;
|
import client.command.CommandContext;
|
||||||
import constants.id.NpcId;
|
import constants.id.NpcId;
|
||||||
|
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
public class HelpCommand extends Command {
|
public class HelpCommand extends Command {
|
||||||
{
|
{
|
||||||
setDescription("Show available commands.");
|
setDescription("Show available commands.");
|
||||||
@@ -35,6 +37,7 @@ public class HelpCommand extends Command {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void execute(Client client, String[] params, CommandContext ctx) {
|
public void execute(Client client, String[] params, CommandContext ctx) {
|
||||||
client.getAbstractPlayerInteraction().openNpc(NpcId.STEWARD, "commands");
|
Map<String, Object> bindings = Map.of("ce", ctx.commandsExecutor());
|
||||||
|
client.getAbstractPlayerInteraction().openNpc(NpcId.STEWARD, "commands", bindings);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -980,7 +980,7 @@ public class Server {
|
|||||||
FredrickProcessor fredrickProcessor = new FredrickProcessor(noteService);
|
FredrickProcessor fredrickProcessor = new FredrickProcessor(noteService);
|
||||||
DropProvider dropProvider = new DropProvider(new DropDao(connection));
|
DropProvider dropProvider = new DropProvider(new DropDao(connection));
|
||||||
ShopFactory shopFactory = new ShopFactory(new ShopDao(connection));
|
ShopFactory shopFactory = new ShopFactory(new ShopDao(connection));
|
||||||
CommandContext commandContext = new CommandContext(dropProvider, shopFactory);
|
CommandContext commandContext = new CommandContext(null, dropProvider, shopFactory);
|
||||||
CommandsExecutor commandsExecutor = new CommandsExecutor(commandContext);
|
CommandsExecutor commandsExecutor = new CommandsExecutor(commandContext);
|
||||||
ChannelDependencies channelDependencies = new ChannelDependencies(noteService, fredrickProcessor,
|
ChannelDependencies channelDependencies = new ChannelDependencies(noteService, fredrickProcessor,
|
||||||
makerProcessor, dropProvider, commandsExecutor, shopFactory);
|
makerProcessor, dropProvider, commandsExecutor, shopFactory);
|
||||||
|
|||||||
@@ -346,13 +346,17 @@ public class AbstractPlayerInteraction {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public void openNpc(int npcid, String script) {
|
public void openNpc(int npcid, String script) {
|
||||||
|
openNpc(npcid, script, Collections.emptyMap());
|
||||||
|
}
|
||||||
|
|
||||||
|
public void openNpc(int npcId, String script, Map<String, Object> additionalBindings) {
|
||||||
if (c.getCM() != null) {
|
if (c.getCM() != null) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
c.removeClickedNPC();
|
c.removeClickedNPC();
|
||||||
NPCScriptManager.getInstance().dispose(c);
|
NPCScriptManager.getInstance().dispose(c);
|
||||||
NPCScriptManager.getInstance().start(c, npcid, script);
|
NPCScriptManager.getInstance().startWithBindings(c, npcId, script, additionalBindings);
|
||||||
}
|
}
|
||||||
|
|
||||||
public int getQuestStatus(int id) {
|
public int getQuestStatus(int id) {
|
||||||
|
|||||||
@@ -37,6 +37,8 @@ import java.util.HashMap;
|
|||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
|
|
||||||
|
import static java.util.Collections.emptyMap;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @author Matze
|
* @author Matze
|
||||||
*/
|
*/
|
||||||
@@ -65,19 +67,24 @@ public class NPCScriptManager extends AbstractScriptManager {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public boolean start(Client c, int npc, int oid, Character chr) {
|
public boolean start(Client c, int npc, int oid, Character chr) {
|
||||||
return startNpcScript(c, npc, oid, null, chr);
|
return startNpcScript(c, npc, oid, null, chr, emptyMap());
|
||||||
}
|
}
|
||||||
|
|
||||||
public boolean start(Client c, int npc, String fileName) {
|
public boolean start(Client c, int npc, String fileName) {
|
||||||
return startNpcScript(c, npc, -1, fileName, null);
|
return startNpcScript(c, npc, -1, fileName, null, emptyMap());
|
||||||
}
|
}
|
||||||
|
|
||||||
public boolean startNpcScript(Client c, int npc, int oid, String fileName, Character chr) {
|
public void startWithBindings(Client c, int npc, String fileName, Map<String, Object> bindings) {
|
||||||
return startWithBindings(c, npc, oid, fileName, chr, false, "cm");
|
startNpcScript(c, npc, -1, fileName, null, bindings);
|
||||||
|
}
|
||||||
|
|
||||||
|
private boolean startNpcScript(Client c, int npc, int oid, String fileName, Character chr,
|
||||||
|
Map<String, Object> additionalBindings) {
|
||||||
|
return startWithBindings(c, npc, oid, fileName, chr, false, "cm", additionalBindings);
|
||||||
}
|
}
|
||||||
|
|
||||||
public boolean startItemScript(Client c, ScriptedItem scriptItem) {
|
public boolean startItemScript(Client c, ScriptedItem scriptItem) {
|
||||||
return startWithBindings(c, scriptItem.getNpc(), -1, scriptItem.getScript(), null, true, "im");
|
return startWithBindings(c, scriptItem.getNpc(), -1, scriptItem.getScript(), null, true, "im", emptyMap());
|
||||||
}
|
}
|
||||||
|
|
||||||
public void startCpqScript(String filename, Client c, int npc, List<PartyCharacter> chrs) {
|
public void startCpqScript(String filename, Client c, int npc, List<PartyCharacter> chrs) {
|
||||||
@@ -111,7 +118,8 @@ public class NPCScriptManager extends AbstractScriptManager {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private boolean startWithBindings(Client c, int npc, int oid, String fileName, Character chr, boolean itemScript, String engineName) {
|
private boolean startWithBindings(Client c, int npc, int oid, String fileName, Character chr, boolean itemScript,
|
||||||
|
String engineName, Map<String, Object> bindings) {
|
||||||
try {
|
try {
|
||||||
final NPCConversationManager cm = new NPCConversationManager(c, npc, oid, fileName, itemScript);
|
final NPCConversationManager cm = new NPCConversationManager(c, npc, oid, fileName, itemScript);
|
||||||
if (cms.containsKey(c)) {
|
if (cms.containsKey(c)) {
|
||||||
@@ -138,6 +146,7 @@ public class NPCScriptManager extends AbstractScriptManager {
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
engine.put(engineName, cm);
|
engine.put(engineName, cm);
|
||||||
|
bindings.forEach(engine::put);
|
||||||
|
|
||||||
Invocable iv = (Invocable) engine;
|
Invocable iv = (Invocable) engine;
|
||||||
scripts.put(c, iv);
|
scripts.put(c, iv);
|
||||||
|
|||||||
Reference in New Issue
Block a user