Commit a80302cd authored by AnimeGitB's avatar AnimeGitB Committed by Melledy
Browse files

Fix commands in party chat, re-add optional positional item quantity to give...

Fix commands in party chat, re-add optional positional item quantity to give command, error out and print usage if excess arguments given to give command
parent 13a7f086
...@@ -114,17 +114,26 @@ public final class GiveCommand implements CommandHandler { ...@@ -114,17 +114,26 @@ public final class GiveCommand implements CommandHandler {
default: default:
try { try {
param.id = Integer.parseInt(id); param.id = Integer.parseInt(id);
param.data = GameData.getItemDataMap().get(param.id);
if ((param.id > 10_000_000) && (param.id < 12_000_000))
param.avatarData = GameData.getAvatarDataMap().get(param.id);
else if ((param.id > 1000) && (param.id < 1100))
param.avatarData = GameData.getAvatarDataMap().get(param.id - 1000 + 10_000_000);
isRelic = ((param.data != null) && (param.data.getItemType() == ItemType.ITEM_RELIQUARY));
} catch (NumberFormatException e) { } catch (NumberFormatException e) {
// TODO: Parse from item name using GM Handbook. // TODO: Parse from item name using GM Handbook.
CommandHandler.sendTranslatedMessage(sender, "commands.generic.invalid.itemId"); CommandHandler.sendTranslatedMessage(sender, "commands.generic.invalid.itemId");
throw e; throw e;
} }
param.data = GameData.getItemDataMap().get(param.id);
if ((param.id > 10_000_000) && (param.id < 12_000_000))
param.avatarData = GameData.getAvatarDataMap().get(param.id);
else if ((param.id > 1000) && (param.id < 1100))
param.avatarData = GameData.getAvatarDataMap().get(param.id - 1000 + 10_000_000);
isRelic = ((param.data != null) && (param.data.getItemType() == ItemType.ITEM_RELIQUARY));
if (!isRelic && !args.isEmpty() && (param.amount == 1)) { // A concession for the people that truly hate [x<amount>].
try {
param.amount = Integer.parseInt(args.remove(0));
} catch (NumberFormatException e) {
CommandHandler.sendTranslatedMessage(sender, "commands.generic.invalid.amount");
throw e;
}
}
} }
if (param.amount < 1) param.amount = 1; if (param.amount < 1) param.amount = 1;
...@@ -137,19 +146,24 @@ public final class GiveCommand implements CommandHandler { ...@@ -137,19 +146,24 @@ public final class GiveCommand implements CommandHandler {
param.lvl += 1; param.lvl += 1;
if (illegalRelicIds.contains(param.id)) if (illegalRelicIds.contains(param.id))
CommandHandler.sendTranslatedMessage(sender, "commands.give.illegal_relic"); CommandHandler.sendTranslatedMessage(sender, "commands.give.illegal_relic");
} else { } else {
// Suitable for Avatars and Weapons // Suitable for Avatars and Weapons
if (param.lvl < 1) param.lvl = 1; if (param.lvl < 1) param.lvl = 1;
if (param.lvl > 90) param.lvl = 90; if (param.lvl > 90) param.lvl = 90;
} }
if (isRelic && !args.isEmpty()) { if (!args.isEmpty()) {
try { if (isRelic) {
parseRelicArgs(param, args); try {
} catch (IllegalArgumentException e) { parseRelicArgs(param, args);
CommandHandler.sendTranslatedMessage(sender, "commands.execution.argument_error"); } catch (IllegalArgumentException e) {
CommandHandler.sendTranslatedMessage(sender, "commands.give.usage_relic"); CommandHandler.sendTranslatedMessage(sender, "commands.execution.argument_error");
throw e; CommandHandler.sendTranslatedMessage(sender, "commands.give.usage_relic");
throw e;
}
} else {
CommandHandler.sendTranslatedMessage(sender, "commands.give.usage");
throw new IllegalArgumentException();
} }
} }
...@@ -216,8 +230,8 @@ public final class GiveCommand implements CommandHandler { ...@@ -216,8 +230,8 @@ public final class GiveCommand implements CommandHandler {
} }
} catch (IllegalArgumentException ignored) { } catch (IllegalArgumentException ignored) {
return; return;
}
} }
}
private static Avatar makeAvatar(GiveItemParameters param) { private static Avatar makeAvatar(GiveItemParameters param) {
return makeAvatar(param.avatarData, param.lvl, Avatar.getMinPromoteLevel(param.lvl), 0); return makeAvatar(param.avatarData, param.lvl, Avatar.getMinPromoteLevel(param.lvl), 0);
......
...@@ -7,14 +7,15 @@ import emu.grasscutter.server.game.GameServer; ...@@ -7,14 +7,15 @@ import emu.grasscutter.server.game.GameServer;
import emu.grasscutter.server.packet.send.PacketPlayerChatNotify; import emu.grasscutter.server.packet.send.PacketPlayerChatNotify;
import emu.grasscutter.server.packet.send.PacketPrivateChatNotify; import emu.grasscutter.server.packet.send.PacketPrivateChatNotify;
import java.util.Arrays; import java.util.regex.Pattern;
import java.util.List;
public class ChatManager implements ChatManagerHandler { public class ChatManager implements ChatManagerHandler {
static final List<Character> PREFIXES = Arrays.asList('/', '!'); static final String PREFIXES = "[/!]";
static final Pattern RE_PREFIXES = Pattern.compile(PREFIXES);
static final Pattern RE_COMMANDS = Pattern.compile("\n" + PREFIXES);
private final GameServer server; private final GameServer server;
public ChatManager(GameServer server) { public ChatManager(GameServer server) {
this.server = server; this.server = server;
} }
...@@ -23,56 +24,62 @@ public class ChatManager implements ChatManagerHandler { ...@@ -23,56 +24,62 @@ public class ChatManager implements ChatManagerHandler {
return server; return server;
} }
private boolean tryInvokeCommand(Player sender, Player target, String rawMessage) {
if (!RE_PREFIXES.matcher(rawMessage.substring(0, 1)).matches())
return false;
for (String line : rawMessage.substring(1).split("\n[/!]"))
CommandMap.getInstance().invoke(sender, target, line);
return true;
}
public void sendPrivateMessage(Player player, int targetUid, String message) { public void sendPrivateMessage(Player player, int targetUid, String message) {
// Sanity checks // Sanity checks
if (message == null || message.length() == 0) { if (message == null || message.length() == 0) {
return; return;
} }
// Get target // Get target
Player target = getServer().getPlayerByUid(targetUid); Player target = getServer().getPlayerByUid(targetUid);
// Check if command // Check if command
if (PREFIXES.contains(message.charAt(0))) { if (tryInvokeCommand(player, target, message)) {
CommandMap.getInstance().invoke(player, target, message.substring(1));
return; return;
} }
if (target == null) { if (target == null) {
return; return;
} }
// Create chat packet // Create chat packet
BasePacket packet = new PacketPrivateChatNotify(player.getUid(), target.getUid(), message); BasePacket packet = new PacketPrivateChatNotify(player.getUid(), target.getUid(), message);
player.sendPacket(packet); player.sendPacket(packet);
target.sendPacket(packet); target.sendPacket(packet);
} }
public void sendPrivateMessage(Player player, int targetUid, int emote) { public void sendPrivateMessage(Player player, int targetUid, int emote) {
// Get target // Get target
Player target = getServer().getPlayerByUid(targetUid); Player target = getServer().getPlayerByUid(targetUid);
if (target == null) { if (target == null) {
return; return;
} }
// Create chat packet // Create chat packet
BasePacket packet = new PacketPrivateChatNotify(player.getUid(), target.getUid(), emote); BasePacket packet = new PacketPrivateChatNotify(player.getUid(), target.getUid(), emote);
player.sendPacket(packet); player.sendPacket(packet);
target.sendPacket(packet); target.sendPacket(packet);
} }
public void sendTeamMessage(Player player, int channel, String message) { public void sendTeamMessage(Player player, int channel, String message) {
// Sanity checks // Sanity checks
if (message == null || message.length() == 0) { if (message == null || message.length() == 0) {
return; return;
} }
// Check if command // Check if command
if (PREFIXES.contains(message.charAt(0))) { if (tryInvokeCommand(player, null, message)) {
CommandMap.getInstance().invoke(player, null, message);
return; return;
} }
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment