MonsterData.java 3.65 KB
Newer Older
Melledy's avatar
Melledy committed
1
package emu.grasscutter.data.excels;
Melledy's avatar
Melledy committed
2
3

import java.util.List;
AnimeGitB's avatar
AnimeGitB committed
4
5
6
import java.util.Set;

import com.google.gson.annotations.SerializedName;
Melledy's avatar
Melledy committed
7

8
9
import emu.grasscutter.data.GameData;
import emu.grasscutter.data.GameResource;
Melledy's avatar
Melledy committed
10
11
12
import emu.grasscutter.data.ResourceType;
import emu.grasscutter.data.ResourceType.LoadPriority;
import emu.grasscutter.data.common.PropGrowCurve;
AnimeGitB's avatar
AnimeGitB committed
13
import emu.grasscutter.game.props.FightProperty;
14
import emu.grasscutter.game.props.MonsterType;
AnimeGitB's avatar
AnimeGitB committed
15
import lombok.Getter;
Melledy's avatar
Melledy committed
16
17

@ResourceType(name = "MonsterExcelConfigData.json", loadPriority = LoadPriority.LOW)
AnimeGitB's avatar
AnimeGitB committed
18
@Getter
19
public class MonsterData extends GameResource {
AnimeGitB's avatar
AnimeGitB committed
20
21
22
23
24
25
    static public Set<FightProperty> definedFightProperties = Set.of(FightProperty.FIGHT_PROP_BASE_HP, FightProperty.FIGHT_PROP_BASE_ATTACK, FightProperty.FIGHT_PROP_BASE_DEFENSE, FightProperty.FIGHT_PROP_PHYSICAL_SUB_HURT, FightProperty.FIGHT_PROP_FIRE_SUB_HURT, FightProperty.FIGHT_PROP_ELEC_SUB_HURT, FightProperty.FIGHT_PROP_WATER_SUB_HURT, FightProperty.FIGHT_PROP_GRASS_SUB_HURT, FightProperty.FIGHT_PROP_WIND_SUB_HURT, FightProperty.FIGHT_PROP_ROCK_SUB_HURT, FightProperty.FIGHT_PROP_ICE_SUB_HURT);

    @Getter(onMethod = @__(@Override))
    private int id;

    private String monsterName;
26
    private MonsterType type;
Melledy's avatar
Melledy committed
27
28
29
30
31
32
33
34
35
36
37
38
39
    private String serverScript;
    private List<Integer> affix;
    private String ai;
    private int[] equips;
    private List<HpDrops> hpDrops;
    private int killDropId;
    private String excludeWeathers;
    private int featureTagGroupID;
    private int mpPropID;
    private String skin;
    private int describeId;
    private int combatBGMLevel;
    private int entityBudgetLevel;
AnimeGitB's avatar
AnimeGitB committed
40
41
42
43
44
45
46
47

    @SerializedName("hpBase")
    private float baseHp;
    @SerializedName("attackBase")
    private float baseAttack;
    @SerializedName("defenseBase")
    private float baseDefense;

Melledy's avatar
Melledy committed
48
49
50
51
52
53
54
55
56
57
58
    private float fireSubHurt;
    private float elecSubHurt;
    private float grassSubHurt;
    private float waterSubHurt;
    private float windSubHurt;
    private float rockSubHurt;
    private float iceSubHurt;
    private float physicalSubHurt;
    private List<PropGrowCurve> propGrowCurves;
    private long nameTextMapHash;
    private int campID;
github-actions's avatar
github-actions committed
59

Melledy's avatar
Melledy committed
60
    // Transient
Melledy's avatar
Melledy committed
61
62
63
    private int weaponId;
    private MonsterDescribeData describeData;

AnimeGitB's avatar
AnimeGitB committed
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
    public float getFightProperty(FightProperty prop) {
        return switch (prop) {
            case FIGHT_PROP_BASE_HP -> this.baseHp;
            case FIGHT_PROP_BASE_ATTACK -> this.baseAttack;
            case FIGHT_PROP_BASE_DEFENSE -> this.baseDefense;
            case FIGHT_PROP_PHYSICAL_SUB_HURT -> this.physicalSubHurt;
            case FIGHT_PROP_FIRE_SUB_HURT -> this.fireSubHurt;
            case FIGHT_PROP_ELEC_SUB_HURT -> this.elecSubHurt;
            case FIGHT_PROP_WATER_SUB_HURT -> this.waterSubHurt;
            case FIGHT_PROP_GRASS_SUB_HURT -> this.grassSubHurt;
            case FIGHT_PROP_WIND_SUB_HURT -> this.windSubHurt;
            case FIGHT_PROP_ROCK_SUB_HURT -> this.rockSubHurt;
            case FIGHT_PROP_ICE_SUB_HURT -> this.iceSubHurt;
            default -> 0f;
        };
    }
Melledy's avatar
Melledy committed
80

github-actions's avatar
github-actions committed
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
    @Override
    public void onLoad() {
        this.describeData = GameData.getMonsterDescribeDataMap().get(this.getDescribeId());

        for (int id : this.equips) {
            if (id == 0) {
                continue;
            }
            GadgetData gadget = GameData.getGadgetDataMap().get(id);
            if (gadget == null) {
                continue;
            }
            if (gadget.getItemJsonName().equals("Default_MonsterWeapon")) {
                this.weaponId = id;
            }
        }
    }
Melledy's avatar
Melledy committed
98

AnimeGitB's avatar
AnimeGitB committed
99
100
101
102
103
    @Getter
    public class HpDrops {
        private int DropId;
        private int HpPercent;
    }
Melledy's avatar
Melledy committed
104
}