TalentCommand.java 5.95 KB
Newer Older
alt3ri's avatar
alt3ri committed
1
2
package emu.grasscutter.command.commands;

方块君's avatar
方块君 committed
3
import emu.grasscutter.Grasscutter;
alt3ri's avatar
alt3ri committed
4
5
import emu.grasscutter.command.Command;
import emu.grasscutter.command.CommandHandler;
xtaodada's avatar
xtaodada committed
6
import emu.grasscutter.data.def.AvatarSkillDepotData;
7
import emu.grasscutter.game.avatar.Avatar;
alt3ri's avatar
alt3ri committed
8
import emu.grasscutter.game.entity.EntityAvatar;
Melledy's avatar
Melledy committed
9
import emu.grasscutter.game.player.Player;
alt3ri's avatar
alt3ri committed
10
11
12
13
14
15
16
import emu.grasscutter.server.packet.send.PacketAvatarSkillChangeNotify;
import emu.grasscutter.server.packet.send.PacketAvatarSkillUpgradeRsp;

import java.util.List;

@Command(label = "talent", usage = "talent <talentID> <value>",
        description = "Set talent level for your current active character", permission = "player.settalent")
KingRainbow44's avatar
KingRainbow44 committed
17
public final class TalentCommand implements CommandHandler {
AnimeGitB's avatar
AnimeGitB committed
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
    private void setTalentLevel(Player sender, Player player, Avatar avatar, int talentId, int talentLevel) {
        int oldLevel = avatar.getSkillLevelMap().get(talentId);
        if (talentLevel < 0 || talentLevel > 15) {
            CommandHandler.sendMessage(sender, Grasscutter.getLanguage().Talent_lower_16);
            return;
        }

        // Upgrade skill
        avatar.getSkillLevelMap().put(talentLevel, talentLevel);
        avatar.save();

        // Packet
        player.sendPacket(new PacketAvatarSkillChangeNotify(avatar, talentId, oldLevel, talentLevel));
        player.sendPacket(new PacketAvatarSkillUpgradeRsp(avatar, talentId, oldLevel, talentLevel));

        String successMessage = Grasscutter.getLanguage().Talent_set_id.replace("{id}", Integer.toString(talentId));
        AvatarSkillDepotData depot = avatar.getData().getSkillDepot();
        if (talentId == depot.getSkills().get(0)) {
            successMessage = Grasscutter.getLanguage().Talent_set_atk;
        } else if (talentId == depot.getSkills().get(1)) {
            successMessage = Grasscutter.getLanguage().Talent_set_e;
        } else if (talentId == depot.getEnergySkill()) {
            successMessage = Grasscutter.getLanguage().Talent_set_q;
        }
        CommandHandler.sendMessage(sender, successMessage.replace("{level}", Integer.toString(talentLevel)));
    }
alt3ri's avatar
alt3ri committed
44
45

    @Override
AnimeGitB's avatar
AnimeGitB committed
46
    public void execute(Player sender, Player targetPlayer, List<String> args) {
AnimeGitB's avatar
AnimeGitB committed
47
48
        if (targetPlayer == null) {
            CommandHandler.sendMessage(sender, Grasscutter.getLanguage().Target_needed);
alt3ri's avatar
alt3ri committed
49
50
51
            return;
        }

xtaodada's avatar
xtaodada committed
52
        if (args.size() < 1){
方块君's avatar
方块君 committed
53
54
55
            CommandHandler.sendMessage(sender, Grasscutter.getLanguage().Talent_usage_1);
            CommandHandler.sendMessage(sender, Grasscutter.getLanguage().Talent_usage_2);
            CommandHandler.sendMessage(sender, Grasscutter.getLanguage().Talent_usage_3);
alt3ri's avatar
alt3ri committed
56
57
58
            return;
        }

AnimeGitB's avatar
AnimeGitB committed
59
60
        EntityAvatar entity = sender.getTeamManager().getCurrentAvatarEntity();
        Avatar avatar = entity.getAvatar(); 
alt3ri's avatar
alt3ri committed
61
62
63
        String cmdSwitch = args.get(0);
        switch (cmdSwitch) {
            default:
方块君's avatar
方块君 committed
64
65
66
                CommandHandler.sendMessage(sender, Grasscutter.getLanguage().Talent_usage_1);
                CommandHandler.sendMessage(sender, Grasscutter.getLanguage().Talent_usage_2);
                CommandHandler.sendMessage(sender, Grasscutter.getLanguage().Talent_usage_3);
alt3ri's avatar
alt3ri committed
67
68
            return;
            case "set":
AnimeGitB's avatar
AnimeGitB committed
69
70
71
72
73
74
75
76
77
78
79
80
81
82
                if (args.size() < 3){
                    CommandHandler.sendMessage(sender, Grasscutter.getLanguage().Talent_usage_1);
                    CommandHandler.sendMessage(sender, Grasscutter.getLanguage().Talent_usage_3);
                    return;
                }

                try {
                    int skillId = Integer.parseInt(args.get(1));
                    int newLevel = Integer.parseInt(args.get(2));
                    setTalentLevel(sender, targetPlayer, avatar, skillId, newLevel);
                } catch (NumberFormatException ignored) {
                    CommandHandler.sendMessage(sender, Grasscutter.getLanguage().Talent_invalid_skill_id);
                    return;
                }
xtaodada's avatar
xtaodada committed
83
                break;
AnimeGitB's avatar
AnimeGitB committed
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
            case "n":
            case "e":
            case "q":
                if (args.size() < 2){
                    CommandHandler.sendMessage(sender, Grasscutter.getLanguage().Talent_usage_2);
                    return;
                }

                AvatarSkillDepotData SkillDepot = avatar.getData().getSkillDepot();
                int skillId;
                switch (cmdSwitch) {
                    default:
                        skillId = SkillDepot.getSkills().get(0);
                        break;
                    case "e":
                        skillId = SkillDepot.getSkills().get(1);
                        break;
                    case "q":
                        skillId = SkillDepot.getEnergySkill();
                        break;
                }

xtaodada's avatar
xtaodada committed
106
                try {
AnimeGitB's avatar
AnimeGitB committed
107
108
                    int newLevel = Integer.parseInt(args.get(1));
                    setTalentLevel(sender, targetPlayer, avatar, skillId, newLevel);
xtaodada's avatar
xtaodada committed
109
                } catch (NumberFormatException ignored) {
方块君's avatar
方块君 committed
110
                    CommandHandler.sendMessage(sender, Grasscutter.getLanguage().Talent_invalid_talent_level);
xtaodada's avatar
xtaodada committed
111
112
                    return;
                }
alt3ri's avatar
alt3ri committed
113
                break;
AnimeGitB's avatar
AnimeGitB committed
114
115
116
117
            case "getid":
                int skillIdNorAtk = avatar.getData().getSkillDepot().getSkills().get(0);
                int skillIdE = avatar.getData().getSkillDepot().getSkills().get(1);
                int skillIdQ = avatar.getData().getSkillDepot().getEnergySkill();
118

AnimeGitB's avatar
AnimeGitB committed
119
120
121
                CommandHandler.sendMessage(sender, Grasscutter.getLanguage().Talent_normal_attack_id.replace("{id}", Integer.toString(skillIdNorAtk)));
                CommandHandler.sendMessage(sender, Grasscutter.getLanguage().Talent_e_skill_id.replace("{id}", Integer.toString(skillIdE)));
                CommandHandler.sendMessage(sender, Grasscutter.getLanguage().Talent_q_skill_id.replace("{id}", Integer.toString(skillIdQ)));
alt3ri's avatar
alt3ri committed
122
123
124
125
                break;
        }
    }
}