GiveAllCommand.java 5.78 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

AnimeGitB's avatar
AnimeGitB committed
16
@Command(label = "giveall", usage = "giveall [amount]",
BaiSugar's avatar
BaiSugar committed
17
        description = "Gives all items", aliases = {"givea"}, permission = "player.giveall", threading = true)
KingRainbow44's avatar
KingRainbow44 committed
18
public final class GiveAllCommand implements CommandHandler {
BaiSugar's avatar
BaiSugar committed
19

BaiSugar's avatar
BaiSugar committed
20
    @Override
AnimeGitB's avatar
AnimeGitB committed
21
    public void execute(Player sender, Player targetPlayer, List<String> args) {
AnimeGitB's avatar
AnimeGitB committed
22
23
24
25
26
        if (targetPlayer == null) {
            CommandHandler.sendMessage(sender, Grasscutter.getLanguage().Target_needed);
            return;
        }
        int amount = 99999;
BaiSugar's avatar
BaiSugar committed
27
28

        switch (args.size()) {
AnimeGitB's avatar
AnimeGitB committed
29
            case 0:
BaiSugar's avatar
BaiSugar committed
30
                break;
AnimeGitB's avatar
AnimeGitB committed
31
            case 1: // [amount]
BaiSugar's avatar
BaiSugar committed
32
                try {
AnimeGitB's avatar
AnimeGitB committed
33
                    amount = Integer.parseInt(args.get(0));
BaiSugar's avatar
BaiSugar committed
34
                } catch (NumberFormatException ignored) {
AnimeGitB's avatar
AnimeGitB committed
35
                    CommandHandler.sendMessage(sender, Grasscutter.getLanguage().Invalid_amount);
BaiSugar's avatar
BaiSugar committed
36
37
38
                    return;
                }
                break;
BaiSugar's avatar
BaiSugar committed
39
            default: // invalid
方块君's avatar
方块君 committed
40
                CommandHandler.sendMessage(null, Grasscutter.getLanguage().GiveAll_usage);
BaiSugar's avatar
BaiSugar committed
41
                return;
BaiSugar's avatar
BaiSugar committed
42
43
        }

BaiSugar's avatar
BaiSugar committed
44
        this.giveAllItems(targetPlayer, amount);
方块君's avatar
方块君 committed
45
        CommandHandler.sendMessage(sender, Grasscutter.getLanguage().GiveAll_done);
BaiSugar's avatar
BaiSugar committed
46
47
    }

48
    public void giveAllItems(Player player, int amount) {
方块君's avatar
方块君 committed
49
        CommandHandler.sendMessage(player, Grasscutter.getLanguage().GiveAll_item);
BaiSugar's avatar
BaiSugar committed
50

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

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

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

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

BaiSugar's avatar
BaiSugar committed
106
107
108
109
110
111
112
113
    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
114
            }
BaiSugar's avatar
BaiSugar committed
115
116
        }

KingRainbow44's avatar
KingRainbow44 committed
117
        return testItemsList.contains(itemId);
BaiSugar's avatar
BaiSugar committed
118
119
120
    }

    static class Range {
KingRainbow44's avatar
KingRainbow44 committed
121
        private final int min, max;
BaiSugar's avatar
BaiSugar committed
122
123
124
125
126
127
128

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

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

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

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

BaiSugar's avatar
BaiSugar committed
167
}
BaiSugar's avatar
BaiSugar committed
168