mirror of
https://github.com/Grasscutters/Grasscutter.git
synced 2025-12-17 09:25:06 +01:00
Merge branch 'development' into tp
This commit is contained in:
@@ -18,79 +18,86 @@ public final class ClearCommand implements CommandHandler {
|
||||
@Override
|
||||
public void execute(Player sender, List<String> args) {
|
||||
int target;
|
||||
String cmdSwitch = "";
|
||||
if (sender == null) {
|
||||
CommandHandler.sendMessage(null, "Run this command in-game.");
|
||||
return;
|
||||
return;
|
||||
}
|
||||
String cmdSwitch = args.get(1);
|
||||
|
||||
Inventory playerInventory = sender.getInventory();
|
||||
try {
|
||||
try {
|
||||
if (args.size() == 1) {
|
||||
cmdSwitch = args.get(0);
|
||||
target = sender.getUid();
|
||||
}else {
|
||||
cmdSwitch = args.get(1);
|
||||
target = Integer.parseInt(args.get(0));
|
||||
Player targetPlayer = Grasscutter.getGameServer().getPlayerByUid(target);
|
||||
if (targetPlayer == null) {
|
||||
target = sender.getUid();
|
||||
} else {
|
||||
switch (cmdSwitch) {
|
||||
case "wp" -> {
|
||||
playerInventory.getItems().values().stream()
|
||||
.filter(item -> item.getItemType() == ItemType.ITEM_WEAPON)
|
||||
.filter(item -> !item.isLocked() && !item.isEquipped())
|
||||
.forEach(item -> playerInventory.removeItem(item, item.getCount()));
|
||||
sender.dropMessage("Cleared weapons for " + targetPlayer.getNickname() + " .");
|
||||
}
|
||||
case "art" -> {
|
||||
playerInventory.getItems().values().stream()
|
||||
.filter(item -> item.getItemType() == ItemType.ITEM_RELIQUARY)
|
||||
.filter(item -> item.getLevel() == 1 && item.getExp() == 0)
|
||||
.filter(item -> !item.isLocked() && !item.isEquipped())
|
||||
.forEach(item -> playerInventory.removeItem(item, item.getCount()));
|
||||
sender.dropMessage("Cleared artifacts for " + targetPlayer.getNickname() + " .");
|
||||
}
|
||||
case "mat" -> {
|
||||
playerInventory.getItems().values().stream()
|
||||
.filter(item -> item.getItemType() == ItemType.ITEM_MATERIAL)
|
||||
.filter(item -> item.getLevel() == 1 && item.getExp() == 0)
|
||||
.filter(item -> !item.isLocked() && !item.isEquipped())
|
||||
.forEach(item -> playerInventory.removeItem(item, item.getCount()));
|
||||
sender.dropMessage("Cleared artifacts for " + targetPlayer.getNickname() + " .");
|
||||
}
|
||||
case "all" -> {
|
||||
playerInventory.getItems().values().stream()
|
||||
.filter(item1 -> item1.getItemType() == ItemType.ITEM_RELIQUARY)
|
||||
.filter(item1 -> item1.getLevel() == 1 && item1.getExp() == 0)
|
||||
.filter(item1 -> !item1.isLocked() && !item1.isEquipped())
|
||||
.forEach(item1 -> playerInventory.removeItem(item1, item1.getCount()));
|
||||
playerInventory.getItems().values().stream()
|
||||
.filter(item2 -> item2.getItemType() == ItemType.ITEM_MATERIAL)
|
||||
.filter(item2 -> !item2.isLocked() && !item2.isEquipped())
|
||||
.forEach(item2 -> playerInventory.removeItem(item2, item2.getCount()));
|
||||
playerInventory.getItems().values().stream()
|
||||
.filter(item3 -> item3.getItemType() == ItemType.ITEM_WEAPON)
|
||||
.filter(item3 -> item3.getLevel() == 1 && item3.getExp() == 0)
|
||||
.filter(item3 -> !item3.isLocked() && !item3.isEquipped())
|
||||
.forEach(item3 -> playerInventory.removeItem(item3, item3.getCount()));
|
||||
playerInventory.getItems().values().stream()
|
||||
.filter(item4 -> item4.getItemType() == ItemType.ITEM_FURNITURE)
|
||||
.filter(item4 -> !item4.isLocked() && !item4.isEquipped())
|
||||
.forEach(item4 -> playerInventory.removeItem(item4, item4.getCount()));
|
||||
playerInventory.getItems().values().stream()
|
||||
.filter(item5 -> item5.getItemType() == ItemType.ITEM_DISPLAY)
|
||||
.filter(item5 -> !item5.isLocked() && !item5.isEquipped())
|
||||
.forEach(item5 -> playerInventory.removeItem(item5, item5.getCount()));
|
||||
playerInventory.getItems().values().stream()
|
||||
.filter(item6 -> item6.getItemType() == ItemType.ITEM_VIRTUAL)
|
||||
.filter(item6 -> !item6.isLocked() && !item6.isEquipped())
|
||||
.forEach(item6 -> playerInventory.removeItem(item6, item6.getCount()));
|
||||
sender.dropMessage("Cleared everything for " + targetPlayer.getNickname() + " .");
|
||||
}
|
||||
}
|
||||
}
|
||||
} catch (NumberFormatException ignored) {
|
||||
// TODO: Parse from item name using GM Handbook.
|
||||
CommandHandler.sendMessage(sender, "Invalid playerId.");
|
||||
return;
|
||||
}
|
||||
Player targetPlayer = Grasscutter.getGameServer().getPlayerByUid(target);
|
||||
switch (cmdSwitch) {
|
||||
case "wp" -> {
|
||||
playerInventory.getItems().values().stream()
|
||||
.filter(item -> item.getItemType() == ItemType.ITEM_WEAPON)
|
||||
.filter(item -> !item.isLocked() && !item.isEquipped())
|
||||
.forEach(item -> playerInventory.removeItem(item, item.getCount()));
|
||||
sender.dropMessage("Cleared weapons for " + targetPlayer.getNickname() + " .");
|
||||
}
|
||||
case "art" -> {
|
||||
playerInventory.getItems().values().stream()
|
||||
.filter(item -> item.getItemType() == ItemType.ITEM_RELIQUARY)
|
||||
.filter(item -> item.getLevel() == 1 && item.getExp() == 0)
|
||||
.filter(item -> !item.isLocked() && !item.isEquipped())
|
||||
.forEach(item -> playerInventory.removeItem(item, item.getCount()));
|
||||
sender.dropMessage("Cleared artifacts for " + targetPlayer.getNickname() + " .");
|
||||
}
|
||||
case "mat" -> {
|
||||
playerInventory.getItems().values().stream()
|
||||
.filter(item -> item.getItemType() == ItemType.ITEM_MATERIAL)
|
||||
.filter(item -> item.getLevel() == 1 && item.getExp() == 0)
|
||||
.filter(item -> !item.isLocked() && !item.isEquipped())
|
||||
.forEach(item -> playerInventory.removeItem(item, item.getCount()));
|
||||
sender.dropMessage("Cleared artifacts for " + targetPlayer.getNickname() + " .");
|
||||
}
|
||||
case "all" -> {
|
||||
playerInventory.getItems().values().stream()
|
||||
.filter(item1 -> item1.getItemType() == ItemType.ITEM_RELIQUARY)
|
||||
.filter(item1 -> item1.getLevel() == 1 && item1.getExp() == 0)
|
||||
.filter(item1 -> !item1.isLocked() && !item1.isEquipped())
|
||||
.forEach(item1 -> playerInventory.removeItem(item1, item1.getCount()));
|
||||
sender.dropMessage("Cleared artifacts for " + targetPlayer.getNickname() + " .");
|
||||
playerInventory.getItems().values().stream()
|
||||
.filter(item2 -> item2.getItemType() == ItemType.ITEM_MATERIAL)
|
||||
.filter(item2 -> !item2.isLocked() && !item2.isEquipped())
|
||||
.forEach(item2 -> playerInventory.removeItem(item2, item2.getCount()));
|
||||
sender.dropMessage("Cleared materials for " + targetPlayer.getNickname() + " .");
|
||||
playerInventory.getItems().values().stream()
|
||||
.filter(item3 -> item3.getItemType() == ItemType.ITEM_WEAPON)
|
||||
.filter(item3 -> item3.getLevel() == 1 && item3.getExp() == 0)
|
||||
.filter(item3 -> !item3.isLocked() && !item3.isEquipped())
|
||||
.forEach(item3 -> playerInventory.removeItem(item3, item3.getCount()));
|
||||
sender.dropMessage("Cleared weapons for " + targetPlayer.getNickname() + " .");
|
||||
playerInventory.getItems().values().stream()
|
||||
.filter(item4 -> item4.getItemType() == ItemType.ITEM_FURNITURE)
|
||||
.filter(item4 -> !item4.isLocked() && !item4.isEquipped())
|
||||
.forEach(item4 -> playerInventory.removeItem(item4, item4.getCount()));
|
||||
sender.dropMessage("Cleared furniture for " + targetPlayer.getNickname() + " .");
|
||||
playerInventory.getItems().values().stream()
|
||||
.filter(item5 -> item5.getItemType() == ItemType.ITEM_DISPLAY)
|
||||
.filter(item5 -> !item5.isLocked() && !item5.isEquipped())
|
||||
.forEach(item5 -> playerInventory.removeItem(item5, item5.getCount()));
|
||||
sender.dropMessage("Cleared displays for " + targetPlayer.getNickname() + " .");
|
||||
playerInventory.getItems().values().stream()
|
||||
.filter(item6 -> item6.getItemType() == ItemType.ITEM_VIRTUAL)
|
||||
.filter(item6 -> !item6.isLocked() && !item6.isEquipped())
|
||||
.forEach(item6 -> playerInventory.removeItem(item6, item6.getCount()));
|
||||
sender.dropMessage("Cleared virtuals for " + targetPlayer.getNickname() + " .");
|
||||
sender.dropMessage("Cleared everything for " + targetPlayer.getNickname() + " .");
|
||||
}
|
||||
}
|
||||
} catch (NumberFormatException ignored) {
|
||||
// TODO: Parse from item name using GM Handbook.
|
||||
CommandHandler.sendMessage(sender, "Invalid playerId.");
|
||||
return;
|
||||
}
|
||||
|
||||
Player targetPlayer = Grasscutter.getGameServer().getPlayerByUid(target);
|
||||
if (targetPlayer == null) {
|
||||
|
||||
@@ -83,9 +83,6 @@ public class GiveAllCommand implements CommandHandler {
|
||||
Avatar avatar = new Avatar(avatarData);
|
||||
avatar.setLevel(90);
|
||||
avatar.setPromoteLevel(6);
|
||||
for (int i = 1; i <= 6; ++i) {
|
||||
avatar.getTalentIdList().add((avatar.getAvatarId() - 10000000) * 10 + i);
|
||||
}
|
||||
// This will handle stats and talents
|
||||
avatar.recalcStats();
|
||||
player.addAvatar(avatar);
|
||||
@@ -98,7 +95,7 @@ public class GiveAllCommand implements CommandHandler {
|
||||
if (isTestItem(itemdata.getId())) continue;
|
||||
|
||||
if (itemdata.isEquip()) {
|
||||
for (int i = 0; i < 10; ++i) {
|
||||
for (int i = 0; i < 5; ++i) {
|
||||
GameItem item = new GameItem(itemdata);
|
||||
if (itemdata.getItemType() == ItemType.ITEM_WEAPON) {
|
||||
item.setLevel(90);
|
||||
@@ -114,7 +111,7 @@ public class GiveAllCommand implements CommandHandler {
|
||||
itemList.add(item);
|
||||
}
|
||||
}
|
||||
int packetNum = 20;
|
||||
int packetNum = 10;
|
||||
int itemLength = itemList.size();
|
||||
int number = itemLength / packetNum;
|
||||
int remainder = itemLength % packetNum;
|
||||
@@ -171,15 +168,27 @@ public class GiveAllCommand implements CommandHandler {
|
||||
private static final Range[] testItemRanges = new Range[] {
|
||||
new Range(106, 139),
|
||||
new Range(1000, 1099),
|
||||
new Range(2001, 2008),
|
||||
new Range(2017, 2029),
|
||||
// new Range(108001, 108387) //food
|
||||
new Range(2001, 3022),
|
||||
new Range(23300, 23340),
|
||||
new Range(23383, 23385),
|
||||
new Range(78310, 78554),
|
||||
new Range(99310, 99554),
|
||||
new Range(100001, 100187),
|
||||
new Range(100210, 100214),
|
||||
new Range(100303, 100398),
|
||||
new Range(100414, 100425),
|
||||
new Range(100454, 103008),
|
||||
new Range(109000, 109492),
|
||||
new Range(115001, 118004),
|
||||
new Range(141001, 141072),
|
||||
new Range(220050, 221016),
|
||||
};
|
||||
private static final Integer[] testItemsIds = new Integer[] {
|
||||
210, 211, 314, 315, 317, 1005, 1007, 1105, 1107, 1201, 1202, 2800,
|
||||
100001, 100002, 100244, 100305, 100312, 100313, 101212, 11411, 11506, 11507, 11508, 12505,
|
||||
12506, 12508, 12509, 13503, 13506, 14411, 14503, 14505, 14508, 15411, 15504, 15505,
|
||||
15506, 15508, 20001, 10002, 10003, 10004, 10005, 10006, 10008 //9
|
||||
210, 211, 314, 315, 317, 1005, 1007, 1105, 1107, 1201, 1202,10366,
|
||||
101212, 11411, 11506, 11507, 11508, 12505, 12506, 12508, 12509, 13503,
|
||||
13506, 14411, 14503, 14505, 14508, 15411, 15504, 15505, 15506, 15508,
|
||||
20001, 10002, 10003, 10004, 10005, 10006, 10008,100231,100232,100431,
|
||||
101689,105001,105004, 106000,106001,108000,110000
|
||||
};
|
||||
|
||||
private static final Collection<Integer> testItemsList = Arrays.asList(testItemsIds);
|
||||
|
||||
@@ -6,20 +6,20 @@ import emu.grasscutter.command.CommandHandler;
|
||||
import emu.grasscutter.data.GameData;
|
||||
import emu.grasscutter.data.def.ItemData;
|
||||
import emu.grasscutter.game.inventory.GameItem;
|
||||
import emu.grasscutter.game.inventory.ItemType;
|
||||
import emu.grasscutter.game.player.Player;
|
||||
import emu.grasscutter.game.props.ActionReason;
|
||||
import emu.grasscutter.server.packet.send.PacketItemAddHintNotify;
|
||||
|
||||
import java.util.LinkedList;
|
||||
import java.util.List;
|
||||
|
||||
@Command(label = "give", usage = "give [player] <itemId|itemName> [amount] [level]", description = "Gives an item to you or the specified player", aliases = {
|
||||
"g", "item", "giveitem" }, permission = "player.give")
|
||||
"g", "item", "giveitem"}, permission = "player.give")
|
||||
public final class GiveCommand implements CommandHandler {
|
||||
|
||||
@Override
|
||||
public void execute(Player sender, List<String> args) {
|
||||
int target, item, lvl, amount = 1;
|
||||
int target, item, lvl, amount = 1, refinement = 0;
|
||||
if (sender == null && args.size() < 2) {
|
||||
CommandHandler.sendMessage(null, "Usage: give <player> <itemId|itemName> [amount] [level]");
|
||||
return;
|
||||
@@ -79,7 +79,28 @@ public final class GiveCommand implements CommandHandler {
|
||||
return;
|
||||
}
|
||||
break;
|
||||
case 4: // [player] <itemId|itemName> [amount] [level]
|
||||
case 4: // [player] <itemId|itemName> [amount] [level] | <itemId|itemName> [amount] [level] [refinement]
|
||||
try {
|
||||
target = Integer.parseInt(args.get(0));
|
||||
|
||||
if (Grasscutter.getGameServer().getPlayerByUid(target) == null && sender != null) {
|
||||
target = sender.getUid();
|
||||
item = Integer.parseInt(args.get(0));
|
||||
amount = Integer.parseInt(args.get(1));
|
||||
lvl = Integer.parseInt(args.get(2));
|
||||
refinement = Integer.parseInt(args.get(3));
|
||||
} else {
|
||||
item = Integer.parseInt(args.get(1));
|
||||
amount = Integer.parseInt(args.get(2));
|
||||
lvl = Integer.parseInt(args.get(3));
|
||||
}
|
||||
} catch (NumberFormatException ignored) {
|
||||
// TODO: Parse from item name using GM Handbook.
|
||||
CommandHandler.sendMessage(sender, "Invalid item or player ID.");
|
||||
return;
|
||||
}
|
||||
break;
|
||||
case 5: // [player] <itemId|itemName> [amount] [level] [refinement]
|
||||
try {
|
||||
target = Integer.parseInt(args.get(0));
|
||||
|
||||
@@ -90,6 +111,7 @@ public final class GiveCommand implements CommandHandler {
|
||||
item = Integer.parseInt(args.get(1));
|
||||
amount = Integer.parseInt(args.get(2));
|
||||
lvl = Integer.parseInt(args.get(3));
|
||||
refinement = Integer.parseInt(args.get(4));
|
||||
}
|
||||
} catch (NumberFormatException ignored) {
|
||||
// TODO: Parse from item name using GM Handbook.
|
||||
@@ -111,37 +133,58 @@ public final class GiveCommand implements CommandHandler {
|
||||
CommandHandler.sendMessage(sender, "Invalid item id.");
|
||||
return;
|
||||
}
|
||||
if (refinement != 0) {
|
||||
if (itemData.getItemType() == ItemType.ITEM_WEAPON) {
|
||||
if (refinement < 1 || refinement > 5) {
|
||||
CommandHandler.sendMessage(sender, "Refinement must be between 1 and 5.");
|
||||
return;
|
||||
}
|
||||
} else {
|
||||
CommandHandler.sendMessage(sender, "Refinement is only applicable to weapons.");
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
this.item(targetPlayer, itemData, amount, lvl);
|
||||
this.item(targetPlayer, itemData, amount, lvl, refinement);
|
||||
|
||||
if (!itemData.isEquip())
|
||||
if (!itemData.isEquip()) {
|
||||
CommandHandler.sendMessage(sender, String.format("Given %s of %s to %s.", amount, item, target));
|
||||
else
|
||||
} else if (itemData.getItemType() == ItemType.ITEM_WEAPON) {
|
||||
CommandHandler.sendMessage(sender,
|
||||
String.format("Given %s with level %s, refinement %s %s times to %s", item, lvl, refinement, amount, target));
|
||||
} else {
|
||||
CommandHandler.sendMessage(sender,
|
||||
String.format("Given %s with level %s %s times to %s", item, lvl, amount, target));
|
||||
}
|
||||
}
|
||||
|
||||
private void item(Player player, ItemData itemData, int amount, int lvl) {
|
||||
private void item(Player player, ItemData itemData, int amount, int lvl, int refinement) {
|
||||
if (itemData.isEquip()) {
|
||||
List<GameItem> items = new LinkedList<>();
|
||||
for (int i = 0; i < amount; i++) {
|
||||
GameItem item = new GameItem(itemData);
|
||||
item.setCount(amount);
|
||||
item.setLevel(lvl);
|
||||
item.setPromoteLevel(0);
|
||||
if (lvl > 20) { // 20/40
|
||||
if (lvl > 20 && lvl < 40) {
|
||||
item.setPromoteLevel(1);
|
||||
} else if (lvl > 40) { // 40/50
|
||||
} else if (lvl > 40 && lvl <= 50) {
|
||||
item.setPromoteLevel(2);
|
||||
} else if (lvl > 50) { // 50/60
|
||||
} else if (lvl > 50 && lvl <= 60) {
|
||||
item.setPromoteLevel(3);
|
||||
} else if (lvl > 60) { // 60/70
|
||||
} else if (lvl > 60 && lvl <= 70) {
|
||||
item.setPromoteLevel(4);
|
||||
} else if (lvl > 70) { // 70/80
|
||||
} else if (lvl > 70 && lvl <= 80) {
|
||||
item.setPromoteLevel(5);
|
||||
} else if (lvl > 80) { // 80/90
|
||||
} else if (lvl > 80 && lvl <= 90) {
|
||||
item.setPromoteLevel(6);
|
||||
}
|
||||
if (item.getItemType() == ItemType.ITEM_WEAPON) {
|
||||
if (refinement > 0) {
|
||||
item.setRefinement(refinement - 1);
|
||||
} else {
|
||||
item.setRefinement(0);
|
||||
}
|
||||
}
|
||||
items.add(item);
|
||||
}
|
||||
player.getInventory().addItems(items, ActionReason.SubfieldDrop);
|
||||
|
||||
Reference in New Issue
Block a user