Fix player fields not being set

line seps r weird
This commit is contained in:
KingRainbow44
2023-04-10 22:46:19 -04:00
parent 5e56b5e3a8
commit 06cbae31fa
453 changed files with 63228 additions and 63071 deletions

View File

@@ -1,169 +1,169 @@
package emu.grasscutter.game.tower;
import emu.grasscutter.data.GameData;
import emu.grasscutter.data.excels.tower.TowerLevelData;
import emu.grasscutter.game.dungeons.DungeonSettleListener;
import emu.grasscutter.game.dungeons.TowerDungeonSettleListener;
import emu.grasscutter.game.player.BasePlayerManager;
import emu.grasscutter.game.player.Player;
import emu.grasscutter.server.packet.send.*;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
public class TowerManager extends BasePlayerManager {
private static final List<DungeonSettleListener> towerDungeonSettleListener =
List.of(new TowerDungeonSettleListener());
public TowerManager(Player player) {
super(player);
}
public TowerData getTowerData() {
return this.getPlayer().getTowerData();
}
public int getCurrentFloorId() {
return this.getTowerData().currentFloorId;
}
public int getCurrentLevelId() {
return this.getTowerData().currentLevelId + this.getTowerData().currentLevel;
}
/** form 1-3 */
public int getCurrentLevel() {
return this.getTowerData().currentLevel + 1;
}
public Map<Integer, TowerLevelRecord> getRecordMap() {
Map<Integer, TowerLevelRecord> recordMap = getTowerData().recordMap;
if (recordMap == null || recordMap.size() == 0) {
recordMap = new HashMap<>();
recordMap.put(1001, new TowerLevelRecord(1001));
getTowerData().recordMap = recordMap;
}
return recordMap;
}
public void teamSelect(int floor, List<List<Long>> towerTeams) {
var floorData = GameData.getTowerFloorDataMap().get(floor);
getTowerData().currentFloorId = floorData.getFloorId();
getTowerData().currentLevel = 0;
getTowerData().currentLevelId =
GameData.getTowerLevelDataMap().values().stream()
.filter(
x -> x.getLevelGroupId() == floorData.getLevelGroupId() && x.getLevelIndex() == 1)
.findFirst()
.map(TowerLevelData::getId)
.orElse(0);
if (getTowerData().entryScene == 0) {
getTowerData().entryScene = player.getSceneId();
}
player.getTeamManager().setupTemporaryTeam(towerTeams);
}
public void enterLevel(int enterPointId) {
var levelData = GameData.getTowerLevelDataMap().get(getCurrentLevelId());
var dungeonId = levelData.getDungeonId();
notifyCurLevelRecordChange();
// use team user choose
player.getTeamManager().useTemporaryTeam(0);
player
.getServer()
.getDungeonSystem()
.handoffDungeon(player, dungeonId, towerDungeonSettleListener);
// make sure user can exit dungeon correctly
player.getScene().setPrevScene(getTowerData().entryScene);
player.getScene().setPrevScenePoint(enterPointId);
player
.getSession()
.send(new PacketTowerEnterLevelRsp(getTowerData().currentFloorId, getCurrentLevel()));
// stop using skill
player.getSession().send(new PacketCanUseSkillNotify(false));
// notify the cond of stars
player
.getSession()
.send(new PacketTowerLevelStarCondNotify(getTowerData().currentFloorId, getCurrentLevel()));
}
public void notifyCurLevelRecordChange() {
player
.getSession()
.send(
new PacketTowerCurLevelRecordChangeNotify(
getTowerData().currentFloorId, getCurrentLevel()));
}
public void notifyCurLevelRecordChangeWhenDone(int stars) {
Map<Integer, TowerLevelRecord> recordMap = this.getRecordMap();
int currentFloorId = getTowerData().currentFloorId;
if (!recordMap.containsKey(currentFloorId)) {
recordMap.put(
currentFloorId,
new TowerLevelRecord(currentFloorId).setLevelStars(getCurrentLevelId(), stars));
} else {
recordMap.put(
currentFloorId, recordMap.get(currentFloorId).setLevelStars(getCurrentLevelId(), stars));
}
this.getTowerData().currentLevel++;
if (!this.hasNextLevel()) {
// set up the next floor
var nextFloorId = this.getNextFloorId();
recordMap.computeIfAbsent(nextFloorId, TowerLevelRecord::new);
player.getSession().send(new PacketTowerCurLevelRecordChangeNotify(nextFloorId, 1));
} else {
player
.getSession()
.send(new PacketTowerCurLevelRecordChangeNotify(currentFloorId, getCurrentLevel()));
}
}
public boolean hasNextLevel() {
return getTowerData().currentLevel < 3;
}
public int getNextFloorId() {
return this.player
.getServer()
.getTowerSystem()
.getNextFloorId(this.getTowerData().currentFloorId);
}
public boolean hasNextFloor() {
return this.player
.getServer()
.getTowerSystem()
.getNextFloorId(this.getTowerData().currentFloorId)
> 0;
}
public void clearEntry() {
getTowerData().entryScene = 0;
}
public boolean canEnterScheduleFloor() {
Map<Integer, TowerLevelRecord> recordMap = this.getRecordMap();
if (!recordMap.containsKey(this.player.getServer().getTowerSystem().getLastEntranceFloor())) {
return false;
}
return recordMap
.get(this.player.getServer().getTowerSystem().getLastEntranceFloor())
.getStarCount()
>= 6;
}
public void mirrorTeamSetUp(int teamId) {
// use team user choose
player.getTeamManager().useTemporaryTeam(teamId);
player.sendPacket(new PacketTowerMiddleLevelChangeTeamNotify());
}
}
package emu.grasscutter.game.tower;
import emu.grasscutter.data.GameData;
import emu.grasscutter.data.excels.tower.TowerLevelData;
import emu.grasscutter.game.dungeons.DungeonSettleListener;
import emu.grasscutter.game.dungeons.TowerDungeonSettleListener;
import emu.grasscutter.game.player.BasePlayerManager;
import emu.grasscutter.game.player.Player;
import emu.grasscutter.server.packet.send.*;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
public class TowerManager extends BasePlayerManager {
private static final List<DungeonSettleListener> towerDungeonSettleListener =
List.of(new TowerDungeonSettleListener());
public TowerManager(Player player) {
super(player);
}
public TowerData getTowerData() {
return this.getPlayer().getTowerData();
}
public int getCurrentFloorId() {
return this.getTowerData().currentFloorId;
}
public int getCurrentLevelId() {
return this.getTowerData().currentLevelId + this.getTowerData().currentLevel;
}
/** form 1-3 */
public int getCurrentLevel() {
return this.getTowerData().currentLevel + 1;
}
public Map<Integer, TowerLevelRecord> getRecordMap() {
Map<Integer, TowerLevelRecord> recordMap = getTowerData().recordMap;
if (recordMap == null || recordMap.size() == 0) {
recordMap = new HashMap<>();
recordMap.put(1001, new TowerLevelRecord(1001));
getTowerData().recordMap = recordMap;
}
return recordMap;
}
public void teamSelect(int floor, List<List<Long>> towerTeams) {
var floorData = GameData.getTowerFloorDataMap().get(floor);
getTowerData().currentFloorId = floorData.getFloorId();
getTowerData().currentLevel = 0;
getTowerData().currentLevelId =
GameData.getTowerLevelDataMap().values().stream()
.filter(
x -> x.getLevelGroupId() == floorData.getLevelGroupId() && x.getLevelIndex() == 1)
.findFirst()
.map(TowerLevelData::getId)
.orElse(0);
if (getTowerData().entryScene == 0) {
getTowerData().entryScene = player.getSceneId();
}
player.getTeamManager().setupTemporaryTeam(towerTeams);
}
public void enterLevel(int enterPointId) {
var levelData = GameData.getTowerLevelDataMap().get(getCurrentLevelId());
var dungeonId = levelData.getDungeonId();
notifyCurLevelRecordChange();
// use team user choose
player.getTeamManager().useTemporaryTeam(0);
player
.getServer()
.getDungeonSystem()
.handoffDungeon(player, dungeonId, towerDungeonSettleListener);
// make sure user can exit dungeon correctly
player.getScene().setPrevScene(getTowerData().entryScene);
player.getScene().setPrevScenePoint(enterPointId);
player
.getSession()
.send(new PacketTowerEnterLevelRsp(getTowerData().currentFloorId, getCurrentLevel()));
// stop using skill
player.getSession().send(new PacketCanUseSkillNotify(false));
// notify the cond of stars
player
.getSession()
.send(new PacketTowerLevelStarCondNotify(getTowerData().currentFloorId, getCurrentLevel()));
}
public void notifyCurLevelRecordChange() {
player
.getSession()
.send(
new PacketTowerCurLevelRecordChangeNotify(
getTowerData().currentFloorId, getCurrentLevel()));
}
public void notifyCurLevelRecordChangeWhenDone(int stars) {
Map<Integer, TowerLevelRecord> recordMap = this.getRecordMap();
int currentFloorId = getTowerData().currentFloorId;
if (!recordMap.containsKey(currentFloorId)) {
recordMap.put(
currentFloorId,
new TowerLevelRecord(currentFloorId).setLevelStars(getCurrentLevelId(), stars));
} else {
recordMap.put(
currentFloorId, recordMap.get(currentFloorId).setLevelStars(getCurrentLevelId(), stars));
}
this.getTowerData().currentLevel++;
if (!this.hasNextLevel()) {
// set up the next floor
var nextFloorId = this.getNextFloorId();
recordMap.computeIfAbsent(nextFloorId, TowerLevelRecord::new);
player.getSession().send(new PacketTowerCurLevelRecordChangeNotify(nextFloorId, 1));
} else {
player
.getSession()
.send(new PacketTowerCurLevelRecordChangeNotify(currentFloorId, getCurrentLevel()));
}
}
public boolean hasNextLevel() {
return getTowerData().currentLevel < 3;
}
public int getNextFloorId() {
return this.player
.getServer()
.getTowerSystem()
.getNextFloorId(this.getTowerData().currentFloorId);
}
public boolean hasNextFloor() {
return this.player
.getServer()
.getTowerSystem()
.getNextFloorId(this.getTowerData().currentFloorId)
> 0;
}
public void clearEntry() {
getTowerData().entryScene = 0;
}
public boolean canEnterScheduleFloor() {
Map<Integer, TowerLevelRecord> recordMap = this.getRecordMap();
if (!recordMap.containsKey(this.player.getServer().getTowerSystem().getLastEntranceFloor())) {
return false;
}
return recordMap
.get(this.player.getServer().getTowerSystem().getLastEntranceFloor())
.getStarCount()
>= 6;
}
public void mirrorTeamSetUp(int teamId) {
// use team user choose
player.getTeamManager().useTemporaryTeam(teamId);
player.sendPacket(new PacketTowerMiddleLevelChangeTeamNotify());
}
}

View File

@@ -1,89 +1,89 @@
package emu.grasscutter.game.tower;
import emu.grasscutter.Grasscutter;
import emu.grasscutter.data.DataLoader;
import emu.grasscutter.data.GameData;
import emu.grasscutter.data.excels.tower.TowerScheduleData;
import emu.grasscutter.server.game.BaseGameSystem;
import emu.grasscutter.server.game.GameServer;
import java.util.ArrayList;
import java.util.List;
public class TowerSystem extends BaseGameSystem {
private TowerScheduleConfig towerScheduleConfig;
public TowerSystem(GameServer server) {
super(server);
this.load();
}
public synchronized void load() {
try {
towerScheduleConfig = DataLoader.loadClass("TowerSchedule.json", TowerScheduleConfig.class);
} catch (Exception e) {
Grasscutter.getLogger().error("Unable to load tower schedule config.", e);
}
}
public TowerScheduleConfig getTowerScheduleConfig() {
return towerScheduleConfig;
}
public TowerScheduleData getCurrentTowerScheduleData() {
var data = GameData.getTowerScheduleDataMap().get(towerScheduleConfig.getScheduleId());
if (data == null) {
Grasscutter.getLogger()
.error(
"Could not get current tower schedule data by schedule id {}, please check your resource files",
towerScheduleConfig.getScheduleId());
}
return data;
}
public List<Integer> getAllFloors() {
List<Integer> floors = new ArrayList<>(this.getCurrentTowerScheduleData().getEntranceFloorId());
floors.addAll(this.getScheduleFloors());
return floors;
}
public List<Integer> getScheduleFloors() {
return getCurrentTowerScheduleData().getSchedules().get(0).getFloorList();
}
public int getNextFloorId(int floorId) {
var entranceFloors = getCurrentTowerScheduleData().getEntranceFloorId();
var scheduleFloors = getScheduleFloors();
var nextId = 0;
// find in entrance floors first
for (int i = 0; i < entranceFloors.size() - 1; i++) {
if (floorId == entranceFloors.get(i)) {
nextId = entranceFloors.get(i + 1);
}
}
if (floorId == entranceFloors.get(entranceFloors.size() - 1)) {
nextId = scheduleFloors.get(0);
}
if (nextId != 0) {
return nextId;
}
// find in schedule floors
for (int i = 0; i < scheduleFloors.size() - 1; i++) {
if (floorId == scheduleFloors.get(i)) {
nextId = scheduleFloors.get(i + 1);
}
}
return nextId;
}
public Integer getLastEntranceFloor() {
return getCurrentTowerScheduleData()
.getEntranceFloorId()
.get(getCurrentTowerScheduleData().getEntranceFloorId().size() - 1);
}
}
package emu.grasscutter.game.tower;
import emu.grasscutter.Grasscutter;
import emu.grasscutter.data.DataLoader;
import emu.grasscutter.data.GameData;
import emu.grasscutter.data.excels.tower.TowerScheduleData;
import emu.grasscutter.server.game.BaseGameSystem;
import emu.grasscutter.server.game.GameServer;
import java.util.ArrayList;
import java.util.List;
public class TowerSystem extends BaseGameSystem {
private TowerScheduleConfig towerScheduleConfig;
public TowerSystem(GameServer server) {
super(server);
this.load();
}
public synchronized void load() {
try {
towerScheduleConfig = DataLoader.loadClass("TowerSchedule.json", TowerScheduleConfig.class);
} catch (Exception e) {
Grasscutter.getLogger().error("Unable to load tower schedule config.", e);
}
}
public TowerScheduleConfig getTowerScheduleConfig() {
return towerScheduleConfig;
}
public TowerScheduleData getCurrentTowerScheduleData() {
var data = GameData.getTowerScheduleDataMap().get(towerScheduleConfig.getScheduleId());
if (data == null) {
Grasscutter.getLogger()
.error(
"Could not get current tower schedule data by schedule id {}, please check your resource files",
towerScheduleConfig.getScheduleId());
}
return data;
}
public List<Integer> getAllFloors() {
List<Integer> floors = new ArrayList<>(this.getCurrentTowerScheduleData().getEntranceFloorId());
floors.addAll(this.getScheduleFloors());
return floors;
}
public List<Integer> getScheduleFloors() {
return getCurrentTowerScheduleData().getSchedules().get(0).getFloorList();
}
public int getNextFloorId(int floorId) {
var entranceFloors = getCurrentTowerScheduleData().getEntranceFloorId();
var scheduleFloors = getScheduleFloors();
var nextId = 0;
// find in entrance floors first
for (int i = 0; i < entranceFloors.size() - 1; i++) {
if (floorId == entranceFloors.get(i)) {
nextId = entranceFloors.get(i + 1);
}
}
if (floorId == entranceFloors.get(entranceFloors.size() - 1)) {
nextId = scheduleFloors.get(0);
}
if (nextId != 0) {
return nextId;
}
// find in schedule floors
for (int i = 0; i < scheduleFloors.size() - 1; i++) {
if (floorId == scheduleFloors.get(i)) {
nextId = scheduleFloors.get(i + 1);
}
}
return nextId;
}
public Integer getLastEntranceFloor() {
return getCurrentTowerScheduleData()
.getEntranceFloorId()
.get(getCurrentTowerScheduleData().getEntranceFloorId().size() - 1);
}
}