GiveAllCommand.java 5.79 KB
Newer Older
BaiSugar's avatar
BaiSugar committed
1
2
3
4
5
package emu.grasscutter.command.commands;

import emu.grasscutter.Grasscutter;
import emu.grasscutter.command.Command;
import emu.grasscutter.command.CommandHandler;
6
import emu.grasscutter.data.GameData;
BaiSugar's avatar
BaiSugar committed
7
8
import emu.grasscutter.data.def.AvatarData;
import emu.grasscutter.data.def.ItemData;
9
10
import emu.grasscutter.game.avatar.Avatar;
import emu.grasscutter.game.inventory.GameItem;
BaiSugar's avatar
BaiSugar committed
11
import emu.grasscutter.game.inventory.ItemType;
Melledy's avatar
Melledy committed
12
import emu.grasscutter.game.player.Player;
BaiSugar's avatar
BaiSugar committed
13

BaiSugar's avatar
BaiSugar committed
14
import java.util.*;
BaiSugar's avatar
BaiSugar committed
15

16
17
import static emu.grasscutter.utils.Language.translate;

18
@Command(label = "giveall", usage = "giveall [amount]", aliases = {"givea"}, permission = "player.giveall", permissionTargeted = "player.giveall.others", threading = true, description = "commands.giveAll.description")
KingRainbow44's avatar
KingRainbow44 committed
19
public final class GiveAllCommand implements CommandHandler {
BaiSugar's avatar
BaiSugar committed
20

BaiSugar's avatar
BaiSugar committed
21
    @Override
AnimeGitB's avatar
AnimeGitB committed
22
    public void execute(Player sender, Player targetPlayer, List<String> args) {
AnimeGitB's avatar
AnimeGitB committed
23
        int amount = 99999;
BaiSugar's avatar
BaiSugar committed
24
25

        switch (args.size()) {
AnimeGitB's avatar
AnimeGitB committed
26
            case 0:
BaiSugar's avatar
BaiSugar committed
27
                break;
AnimeGitB's avatar
AnimeGitB committed
28
            case 1: // [amount]
BaiSugar's avatar
BaiSugar committed
29
                try {
AnimeGitB's avatar
AnimeGitB committed
30
                    amount = Integer.parseInt(args.get(0));
BaiSugar's avatar
BaiSugar committed
31
                } catch (NumberFormatException ignored) {
Secretboy's avatar
Secretboy committed
32
                    CommandHandler.sendMessage(sender, translate(sender, "commands.generic.invalid.amount"));
BaiSugar's avatar
BaiSugar committed
33
34
35
                    return;
                }
                break;
BaiSugar's avatar
BaiSugar committed
36
            default: // invalid
Secretboy's avatar
Secretboy committed
37
                CommandHandler.sendMessage(sender, translate(sender, "commands.giveAll.usage"));
BaiSugar's avatar
BaiSugar committed
38
                return;
BaiSugar's avatar
BaiSugar committed
39
40
        }

BaiSugar's avatar
BaiSugar committed
41
        this.giveAllItems(targetPlayer, amount);
Secretboy's avatar
Secretboy committed
42
        CommandHandler.sendMessage(sender, translate(targetPlayer, "commands.giveAll.success", targetPlayer.getNickname()));
BaiSugar's avatar
BaiSugar committed
43
44
    }

45
    public void giveAllItems(Player player, int amount) {
Secretboy's avatar
Secretboy committed
46
        CommandHandler.sendMessage(player, translate(player, "commands.giveAll.started"));
BaiSugar's avatar
BaiSugar committed
47

48
        for (AvatarData avatarData: GameData.getAvatarDataMap().values()) {
BaiSugar's avatar
BaiSugar committed
49
50
51
            //Exclude test avatar
            if (isTestAvatar(avatarData.getId())) continue;

52
            Avatar avatar = new Avatar(avatarData);
BaiSugar's avatar
BaiSugar committed
53
54
            avatar.setLevel(90);
            avatar.setPromoteLevel(6);
55
56
            for(int i = 1;i <= 6;++i){
                avatar.getTalentIdList().add((avatar.getAvatarId()-10000000)*10+i);
BaiSugar's avatar
BaiSugar committed
57
58
59
60
61
            }
            // This will handle stats and talents
            avatar.recalcStats();
            player.addAvatar(avatar);
        }
BaiSugar's avatar
BaiSugar committed
62

BaiSugar's avatar
BaiSugar committed
63
        //some test items
64
65
        List<GameItem> itemList = new ArrayList<>();
        for (ItemData itemdata: GameData.getItemDataMap().values()) {
BaiSugar's avatar
BaiSugar committed
66
67
68
            //Exclude test item
            if (isTestItem(itemdata.getId())) continue;

BaiSugar's avatar
BaiSugar committed
69
            if (itemdata.isEquip()) {
lhhxxxxx's avatar
lhhxxxxx committed
70
71
72
                if (itemdata.getItemType() == ItemType.ITEM_WEAPON) {
                    for (int i = 0; i < 5; ++i) {
                        GameItem item = new GameItem(itemdata);
73
74
75
                        item.setLevel(90);
                        item.setPromoteLevel(6);
                        item.setRefinement(4);
lhhxxxxx's avatar
lhhxxxxx committed
76
                        itemList.add(item);
BaiSugar's avatar
BaiSugar committed
77
                    }
BaiSugar's avatar
BaiSugar committed
78
                }
BaiSugar's avatar
BaiSugar committed
79
80
            }
            else {
81
82
83
                GameItem item = new GameItem(itemdata);
                item.setCount(amount);
                itemList.add(item);
BaiSugar's avatar
BaiSugar committed
84
85
            }
        }
BaiSugar's avatar
BaiSugar committed
86
        int packetNum = 10;
87
        int itemLength = itemList.size();
BaiSugar's avatar
BaiSugar committed
88
89
90
91
92
        int number = itemLength / packetNum;
        int remainder = itemLength % packetNum;
        int offset = 0;
        for (int i = 0; i < packetNum; ++i) {
            if (remainder > 0) {
93
                player.getInventory().addItems(itemList.subList(i * number + offset, (i + 1) * number + offset + 1));
BaiSugar's avatar
BaiSugar committed
94
95
96
97
                --remainder;
                ++offset;
            }
            else {
98
                player.getInventory().addItems(itemList.subList(i * number + offset, (i + 1) * number + offset));
BaiSugar's avatar
BaiSugar committed
99
100
101
            }
        }
    }
BaiSugar's avatar
BaiSugar committed
102

BaiSugar's avatar
BaiSugar committed
103
104
105
106
107
108
109
110
    public boolean isTestAvatar(int avatarId) {
        return avatarId < 10000002 || avatarId >= 11000000;
    }

    public boolean isTestItem(int itemId) {
        for (Range range: testItemRanges) {
            if (range.check(itemId)) {
                return true;
BaiSugar's avatar
BaiSugar committed
111
            }
BaiSugar's avatar
BaiSugar committed
112
113
        }

KingRainbow44's avatar
KingRainbow44 committed
114
        return testItemsList.contains(itemId);
BaiSugar's avatar
BaiSugar committed
115
116
117
    }

    static class Range {
KingRainbow44's avatar
KingRainbow44 committed
118
        private final int min, max;
BaiSugar's avatar
BaiSugar committed
119
120
121
122
123
124
125

        public Range(int min, int max) {
            if(min > max){
                min ^= max;
                max ^= min;
                min ^= max;
            }
KingRainbow44's avatar
KingRainbow44 committed
126
            
BaiSugar's avatar
BaiSugar committed
127
128
129
130
131
132
            this.min = min;
            this.max = max;
        }

        public boolean check(int value) {
            return value >= this.min && value <= this.max;
BaiSugar's avatar
BaiSugar committed
133
134
135
        }
    }

BaiSugar's avatar
BaiSugar committed
136
137
138
    private static final Range[] testItemRanges = new Range[] {
            new Range(106, 139),
            new Range(1000, 1099),
BaiSugar's avatar
BaiSugar committed
139
140
141
142
143
144
145
146
147
148
149
150
151
152
            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),
BaiSugar's avatar
BaiSugar committed
153
154
    };
    private static final Integer[] testItemsIds = new Integer[] {
BaiSugar's avatar
BaiSugar committed
155
156
157
158
159
            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
BaiSugar's avatar
BaiSugar committed
160
161
162
163
    };

    private static final Collection<Integer> testItemsList = Arrays.asList(testItemsIds);

BaiSugar's avatar
BaiSugar committed
164
}
BaiSugar's avatar
BaiSugar committed
165