mirror of
https://github.com/Grasscutters/Grasscutter.git
synced 2025-02-09 05:52:52 +08:00
Remove constellation charge and talent level bonuses from db
This commit is contained in:
parent
cbd66a7437
commit
1ecc3f4390
@ -12,6 +12,8 @@ import emu.grasscutter.data.binout.*;
|
|||||||
import emu.grasscutter.game.quest.QuestEncryptionKey;
|
import emu.grasscutter.game.quest.QuestEncryptionKey;
|
||||||
import emu.grasscutter.utils.Utils;
|
import emu.grasscutter.utils.Utils;
|
||||||
import emu.grasscutter.data.excels.*;
|
import emu.grasscutter.data.excels.*;
|
||||||
|
import it.unimi.dsi.fastutil.ints.Int2IntMap;
|
||||||
|
import it.unimi.dsi.fastutil.ints.Int2IntOpenHashMap;
|
||||||
import it.unimi.dsi.fastutil.ints.Int2ObjectLinkedOpenHashMap;
|
import it.unimi.dsi.fastutil.ints.Int2ObjectLinkedOpenHashMap;
|
||||||
import it.unimi.dsi.fastutil.ints.Int2ObjectMap;
|
import it.unimi.dsi.fastutil.ints.Int2ObjectMap;
|
||||||
import it.unimi.dsi.fastutil.ints.Int2ObjectOpenHashMap;
|
import it.unimi.dsi.fastutil.ints.Int2ObjectOpenHashMap;
|
||||||
@ -124,6 +126,7 @@ public class GameData {
|
|||||||
private static Map<Integer, List<Integer>> fetters = new HashMap<>();
|
private static Map<Integer, List<Integer>> fetters = new HashMap<>();
|
||||||
private static Map<Integer, List<ShopGoodsData>> shopGoods = new HashMap<>();
|
private static Map<Integer, List<ShopGoodsData>> shopGoods = new HashMap<>();
|
||||||
protected static Int2ObjectMap<IntSet> proudSkillGroupLevels = new Int2ObjectOpenHashMap<>();
|
protected static Int2ObjectMap<IntSet> proudSkillGroupLevels = new Int2ObjectOpenHashMap<>();
|
||||||
|
protected static Int2IntMap proudSkillGroupMaxLevels = new Int2IntOpenHashMap();
|
||||||
protected static Int2ObjectMap<IntSet> avatarSkillLevels = new Int2ObjectOpenHashMap<>();
|
protected static Int2ObjectMap<IntSet> avatarSkillLevels = new Int2ObjectOpenHashMap<>();
|
||||||
|
|
||||||
// Getters with wrong names, remove later
|
// Getters with wrong names, remove later
|
||||||
@ -141,6 +144,7 @@ public class GameData {
|
|||||||
public static AbilityData getAbilityData(String abilityName) {return abilityDataMap.get(abilityName);}
|
public static AbilityData getAbilityData(String abilityName) {return abilityDataMap.get(abilityName);}
|
||||||
public static IntSet getAvatarSkillLevels(int avatarSkillId) {return avatarSkillLevels.get(avatarSkillId);}
|
public static IntSet getAvatarSkillLevels(int avatarSkillId) {return avatarSkillLevels.get(avatarSkillId);}
|
||||||
public static IntSet getProudSkillGroupLevels(int proudSkillGroupId) {return proudSkillGroupLevels.get(proudSkillGroupId);}
|
public static IntSet getProudSkillGroupLevels(int proudSkillGroupId) {return proudSkillGroupLevels.get(proudSkillGroupId);}
|
||||||
|
public static int getProudSkillGroupMaxLevel(int proudSkillGroupId) {return proudSkillGroupMaxLevels.getOrDefault(proudSkillGroupId, 0);}
|
||||||
|
|
||||||
// Multi-keyed getters
|
// Multi-keyed getters
|
||||||
public static AvatarPromoteData getAvatarPromoteData(int promoteId, int promoteLevel) {
|
public static AvatarPromoteData getAvatarPromoteData(int promoteId, int promoteLevel) {
|
||||||
|
@ -172,12 +172,17 @@ public class ResourceLoader {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private static void cacheTalentLevelSets() {
|
private static void cacheTalentLevelSets() {
|
||||||
|
// All known levels, keyed by proudSkillGroupId
|
||||||
GameData.getProudSkillDataMap().forEach((id, data) ->
|
GameData.getProudSkillDataMap().forEach((id, data) ->
|
||||||
GameData.proudSkillGroupLevels
|
GameData.proudSkillGroupLevels
|
||||||
.computeIfAbsent(data.getProudSkillGroupId(), i -> new IntArraySet())
|
.computeIfAbsent(data.getProudSkillGroupId(), i -> new IntArraySet())
|
||||||
.add(data.getLevel()));
|
.add(data.getLevel()));
|
||||||
|
// All known levels, keyed by avatarSkillId
|
||||||
GameData.getAvatarSkillDataMap().forEach((id, data) ->
|
GameData.getAvatarSkillDataMap().forEach((id, data) ->
|
||||||
GameData.avatarSkillLevels.put((int) id, GameData.proudSkillGroupLevels.get(data.getProudSkillGroupId())));
|
GameData.avatarSkillLevels.put((int) id, GameData.proudSkillGroupLevels.get(data.getProudSkillGroupId())));
|
||||||
|
// Maximum known levels, keyed by proudSkillGroupId
|
||||||
|
GameData.proudSkillGroupLevels.forEach((id, set) ->
|
||||||
|
GameData.proudSkillGroupMaxLevels.put((int) id, set.intStream().max().getAsInt()));
|
||||||
}
|
}
|
||||||
|
|
||||||
private static void loadAbilityEmbryos() {
|
private static void loadAbilityEmbryos() {
|
||||||
|
@ -3,7 +3,6 @@ package emu.grasscutter.game.avatar;
|
|||||||
import static emu.grasscutter.config.Configuration.GAME_OPTIONS;
|
import static emu.grasscutter.config.Configuration.GAME_OPTIONS;
|
||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.HashMap;
|
|
||||||
import java.util.HashSet;
|
import java.util.HashSet;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
@ -60,6 +59,7 @@ import emu.grasscutter.net.proto.ShowEquipOuterClass.ShowEquip;
|
|||||||
import emu.grasscutter.server.packet.send.*;
|
import emu.grasscutter.server.packet.send.*;
|
||||||
import emu.grasscutter.utils.ProtoHelper;
|
import emu.grasscutter.utils.ProtoHelper;
|
||||||
import it.unimi.dsi.fastutil.ints.Int2FloatOpenHashMap;
|
import it.unimi.dsi.fastutil.ints.Int2FloatOpenHashMap;
|
||||||
|
import it.unimi.dsi.fastutil.ints.Int2IntArrayMap;
|
||||||
import it.unimi.dsi.fastutil.ints.Int2IntOpenHashMap;
|
import it.unimi.dsi.fastutil.ints.Int2IntOpenHashMap;
|
||||||
import it.unimi.dsi.fastutil.ints.Int2ObjectMap;
|
import it.unimi.dsi.fastutil.ints.Int2ObjectMap;
|
||||||
import it.unimi.dsi.fastutil.ints.Int2ObjectOpenHashMap;
|
import it.unimi.dsi.fastutil.ints.Int2ObjectOpenHashMap;
|
||||||
@ -95,9 +95,9 @@ public class Avatar {
|
|||||||
|
|
||||||
private List<Integer> fetters;
|
private List<Integer> fetters;
|
||||||
|
|
||||||
private Map<Integer, Integer> skillLevelMap; // Talent levels
|
private Map<Integer, Integer> skillLevelMap = new Int2IntArrayMap(7); // Talent levels
|
||||||
private Map<Integer, Integer> skillExtraChargeMap; // Charges
|
@Transient @Getter private Map<Integer, Integer> skillExtraChargeMap = new Int2IntArrayMap(2); // Charges
|
||||||
private Map<Integer, Integer> proudSkillBonusMap; // Talent bonus levels (from const)
|
@Transient private Map<Integer, Integer> proudSkillBonusMap = new Int2IntArrayMap(2); // Talent bonus levels (from const)
|
||||||
@Getter private int skillDepotId;
|
@Getter private int skillDepotId;
|
||||||
private Set<Integer> talentIdList; // Constellation id list
|
private Set<Integer> talentIdList; // Constellation id list
|
||||||
@Getter private Set<Integer> proudSkillList; // Character passives
|
@Getter private Set<Integer> proudSkillList; // Character passives
|
||||||
@ -118,7 +118,6 @@ public class Avatar {
|
|||||||
this.fightProp = new Int2FloatOpenHashMap();
|
this.fightProp = new Int2FloatOpenHashMap();
|
||||||
this.fightPropOverrides = new Int2FloatOpenHashMap();
|
this.fightPropOverrides = new Int2FloatOpenHashMap();
|
||||||
this.extraAbilityEmbryos = new HashSet<>();
|
this.extraAbilityEmbryos = new HashSet<>();
|
||||||
this.proudSkillBonusMap = new HashMap<>();
|
|
||||||
this.fetters = new ArrayList<>(); // TODO Move to avatar
|
this.fetters = new ArrayList<>(); // TODO Move to avatar
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -136,8 +135,6 @@ public class Avatar {
|
|||||||
this.bornTime = (int) (System.currentTimeMillis() / 1000);
|
this.bornTime = (int) (System.currentTimeMillis() / 1000);
|
||||||
this.flyCloak = 140001;
|
this.flyCloak = 140001;
|
||||||
|
|
||||||
this.skillLevelMap = new HashMap<>();
|
|
||||||
this.skillExtraChargeMap = new HashMap<>();
|
|
||||||
this.talentIdList = new HashSet<>();
|
this.talentIdList = new HashSet<>();
|
||||||
this.proudSkillList = new HashSet<>();
|
this.proudSkillList = new HashSet<>();
|
||||||
|
|
||||||
@ -247,13 +244,6 @@ public class Avatar {
|
|||||||
this.recalcStats();
|
this.recalcStats();
|
||||||
}
|
}
|
||||||
|
|
||||||
private Map<Integer, Integer> getSkillExtraChargeMap() {
|
|
||||||
if (skillExtraChargeMap == null) {
|
|
||||||
skillExtraChargeMap = new HashMap<>();
|
|
||||||
}
|
|
||||||
return skillExtraChargeMap;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setFetterList(List<Integer> fetterList) {
|
public void setFetterList(List<Integer> fetterList) {
|
||||||
this.fetters = fetterList;
|
this.fetters = fetterList;
|
||||||
}
|
}
|
||||||
@ -315,18 +305,16 @@ public class Avatar {
|
|||||||
|
|
||||||
// Returns a copy of the skill bonus levels for the current skillDepot, capped to avoid invalid levels.
|
// Returns a copy of the skill bonus levels for the current skillDepot, capped to avoid invalid levels.
|
||||||
public Map<Integer, Integer> getProudSkillBonusMap() {
|
public Map<Integer, Integer> getProudSkillBonusMap() {
|
||||||
var map = new Int2IntOpenHashMap();
|
var map = new Int2IntArrayMap();
|
||||||
this.skillDepot.getSkillsAndEnergySkill().forEach(skillId -> {
|
this.skillDepot.getSkillsAndEnergySkill().forEach(skillId -> {
|
||||||
val skillData = GameData.getAvatarSkillDataMap().get(skillId);
|
val skillData = GameData.getAvatarSkillDataMap().get(skillId);
|
||||||
if (skillData == null) return;
|
if (skillData == null) return;
|
||||||
int proudSkillGroupId = skillData.getProudSkillGroupId();
|
int proudSkillGroupId = skillData.getProudSkillGroupId();
|
||||||
int bonus = this.proudSkillBonusMap.getOrDefault(proudSkillGroupId, 0);
|
int bonus = this.proudSkillBonusMap.getOrDefault(proudSkillGroupId, 0);
|
||||||
val validLevels = GameData.getProudSkillGroupLevels(proudSkillGroupId);
|
int maxLevel = GameData.getProudSkillGroupMaxLevel(proudSkillGroupId);
|
||||||
if (validLevels != null && validLevels.size() > 0) {
|
int curLevel = this.skillLevelMap.getOrDefault(skillId, 0);
|
||||||
int maxLevel = validLevels.intStream().max().getAsInt();
|
if (maxLevel > 0) {
|
||||||
int maxBonus = maxLevel - this.skillLevelMap.getOrDefault(skillId, 0);
|
bonus = Math.min(bonus, maxLevel - curLevel);
|
||||||
if (maxBonus < bonus)
|
|
||||||
bonus = maxBonus;
|
|
||||||
}
|
}
|
||||||
map.put(proudSkillGroupId, bonus);
|
map.put(proudSkillGroupId, bonus);
|
||||||
});
|
});
|
||||||
@ -678,8 +666,8 @@ public class Avatar {
|
|||||||
|
|
||||||
public void recalcConstellations() {
|
public void recalcConstellations() {
|
||||||
// Clear first
|
// Clear first
|
||||||
this.getProudSkillBonusMap().clear();
|
this.proudSkillBonusMap.clear();
|
||||||
this.getSkillExtraChargeMap().clear();
|
this.skillExtraChargeMap.clear();
|
||||||
|
|
||||||
// Sanity checks
|
// Sanity checks
|
||||||
if (this.data == null || this.skillDepot == null) {
|
if (this.data == null || this.skillDepot == null) {
|
||||||
@ -732,7 +720,7 @@ public class Avatar {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Add to bonus list
|
// Add to bonus list
|
||||||
this.addProudSkillLevelBonus(skillId, 3);
|
this.addProudSkillLevelBonus(skillData.getProudSkillGroupId(), 3);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -834,9 +822,9 @@ public class Avatar {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public boolean sendSkillExtraChargeMap() {
|
public boolean sendSkillExtraChargeMap() {
|
||||||
var map = this.getSkillExtraChargeMap();
|
val map = this.getSkillExtraChargeMap();
|
||||||
if (map.isEmpty()) return false;
|
if (map.isEmpty()) return false;
|
||||||
this.getPlayer().sendPacket(new PacketAvatarSkillInfoNotify(this.guid, new Int2IntOpenHashMap(map)));
|
this.getPlayer().sendPacket(new PacketAvatarSkillInfoNotify(this.guid, new Int2IntArrayMap(map))); // TODO: Remove this allocation when updating interfaces to FastUtils later
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -891,7 +879,7 @@ public class Avatar {
|
|||||||
.setCoreProudSkillLevel(this.getCoreProudSkillLevel())
|
.setCoreProudSkillLevel(this.getCoreProudSkillLevel())
|
||||||
.putAllSkillLevelMap(this.getSkillLevelMap())
|
.putAllSkillLevelMap(this.getSkillLevelMap())
|
||||||
.addAllInherentProudSkillList(this.getProudSkillList())
|
.addAllInherentProudSkillList(this.getProudSkillList())
|
||||||
.putAllProudSkillExtraLevelMap(getProudSkillBonusMap())
|
.putAllProudSkillExtraLevelMap(this.getProudSkillBonusMap())
|
||||||
.setAvatarType(1)
|
.setAvatarType(1)
|
||||||
.setBornTime(this.getBornTime())
|
.setBornTime(this.getBornTime())
|
||||||
.setFetterInfo(avatarFetter)
|
.setFetterInfo(avatarFetter)
|
||||||
|
@ -39,6 +39,7 @@ import emu.grasscutter.utils.ProtoHelper;
|
|||||||
import emu.grasscutter.utils.Utils;
|
import emu.grasscutter.utils.Utils;
|
||||||
import it.unimi.dsi.fastutil.ints.Int2FloatMap;
|
import it.unimi.dsi.fastutil.ints.Int2FloatMap;
|
||||||
import it.unimi.dsi.fastutil.ints.Int2FloatOpenHashMap;
|
import it.unimi.dsi.fastutil.ints.Int2FloatOpenHashMap;
|
||||||
|
import lombok.val;
|
||||||
|
|
||||||
public class EntityAvatar extends GameEntity {
|
public class EntityAvatar extends GameEntity {
|
||||||
private final Avatar avatar;
|
private final Avatar avatar;
|
||||||
@ -193,21 +194,23 @@ public class EntityAvatar extends GameEntity {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public SceneAvatarInfo getSceneAvatarInfo() {
|
public SceneAvatarInfo getSceneAvatarInfo() {
|
||||||
|
val avatar = this.getAvatar();
|
||||||
|
val player = this.getPlayer();
|
||||||
SceneAvatarInfo.Builder avatarInfo = SceneAvatarInfo.newBuilder()
|
SceneAvatarInfo.Builder avatarInfo = SceneAvatarInfo.newBuilder()
|
||||||
.setUid(this.getPlayer().getUid())
|
.setUid(player.getUid())
|
||||||
.setAvatarId(this.getAvatar().getAvatarId())
|
.setAvatarId(avatar.getAvatarId())
|
||||||
.setGuid(this.getAvatar().getGuid())
|
.setGuid(avatar.getGuid())
|
||||||
.setPeerId(this.getPlayer().getPeerId())
|
.setPeerId(player.getPeerId())
|
||||||
.addAllTalentIdList(this.getAvatar().getTalentIdList())
|
.addAllTalentIdList(avatar.getTalentIdList())
|
||||||
.setCoreProudSkillLevel(this.getAvatar().getCoreProudSkillLevel())
|
.setCoreProudSkillLevel(avatar.getCoreProudSkillLevel())
|
||||||
.putAllSkillLevelMap(this.getAvatar().getSkillLevelMap())
|
.putAllSkillLevelMap(avatar.getSkillLevelMap())
|
||||||
.setSkillDepotId(this.getAvatar().getSkillDepotId())
|
.setSkillDepotId(avatar.getSkillDepotId())
|
||||||
.addAllInherentProudSkillList(this.getAvatar().getProudSkillList())
|
.addAllInherentProudSkillList(avatar.getProudSkillList())
|
||||||
.putAllProudSkillExtraLevelMap(this.getAvatar().getProudSkillBonusMap())
|
.putAllProudSkillExtraLevelMap(avatar.getProudSkillBonusMap())
|
||||||
.addAllTeamResonanceList(this.getAvatar().getPlayer().getTeamManager().getTeamResonances())
|
.addAllTeamResonanceList(player.getTeamManager().getTeamResonances())
|
||||||
.setWearingFlycloakId(this.getAvatar().getFlyCloak())
|
.setWearingFlycloakId(avatar.getFlyCloak())
|
||||||
.setCostumeId(this.getAvatar().getCostume())
|
.setCostumeId(avatar.getCostume())
|
||||||
.setBornTime(this.getAvatar().getBornTime());
|
.setBornTime(avatar.getBornTime());
|
||||||
|
|
||||||
for (GameItem item : avatar.getEquips().values()) {
|
for (GameItem item : avatar.getEquips().values()) {
|
||||||
if (item.getItemData().getEquipType() == EquipType.EQUIP_WEAPON) {
|
if (item.getItemData().getEquipType() == EquipType.EQUIP_WEAPON) {
|
||||||
|
Loading…
Reference in New Issue
Block a user