GiveAllCommand.java 5.86 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;
Melledy's avatar
Melledy committed
7
8
import emu.grasscutter.data.excels.AvatarData;
import emu.grasscutter.data.excels.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
            }
            // This will handle stats and talents
            avatar.recalcStats();
ProxyismGH's avatar
ProxyismGH committed
60
61
            // Don't try to add each avatar to the current team
            player.addAvatar(avatar, false);
BaiSugar's avatar
BaiSugar committed
62
        }
BaiSugar's avatar
BaiSugar committed
63

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

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

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

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

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

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

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

BaiSugar's avatar
BaiSugar committed
137
138
139
    private static final Range[] testItemRanges = new Range[] {
            new Range(106, 139),
            new Range(1000, 1099),
BaiSugar's avatar
BaiSugar committed
140
141
142
143
144
145
146
147
148
149
150
151
152
153
            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
154
155
    };
    private static final Integer[] testItemsIds = new Integer[] {
BaiSugar's avatar
BaiSugar committed
156
157
            210, 211, 314, 315, 317, 1005, 1007, 1105, 1107, 1201, 1202,10366,
            101212, 11411, 11506, 11507, 11508, 12505, 12506, 12508, 12509, 13503,
158
            13506, 14411, 14503, 14505, 14508, 15504, 15505, 15506,
BaiSugar's avatar
BaiSugar committed
159
160
            20001, 10002, 10003, 10004, 10005, 10006, 10008,100231,100232,100431,
            101689,105001,105004, 106000,106001,108000,110000
BaiSugar's avatar
BaiSugar committed
161
162
163
164
    };

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

BaiSugar's avatar
BaiSugar committed
165
}
BaiSugar's avatar
BaiSugar committed
166