Move scene group loading into SceneEntityLoader

This commit is contained in:
Melledy
2023-10-30 00:07:17 -07:00
parent 9246664b4b
commit d5a3647820
8 changed files with 52 additions and 40 deletions

View File

@@ -16,6 +16,16 @@ import it.unimi.dsi.fastutil.ints.Int2ObjectMap;
public class ChallengeEntityLoader extends SceneEntityLoader { public class ChallengeEntityLoader extends SceneEntityLoader {
@Override
public void onSceneLoad(Scene scene) {
// Get challenge instance
ChallengeInstance instance = scene.getPlayer().getChallengeInstance();
if (instance == null) return;
// Setup first stage
scene.loadGroup(instance.getExcel().getMazeGroupID1());
}
@Override @Override
public EntityMonster loadMonster(Scene scene, GroupInfo group, MonsterInfo monsterInfo) { public EntityMonster loadMonster(Scene scene, GroupInfo group, MonsterInfo monsterInfo) {
// Get challenge instance // Get challenge instance

View File

@@ -67,14 +67,6 @@ public class ChallengeInstance {
this.currentExtraLineup = type.getNumber(); this.currentExtraLineup = type.getNumber();
} }
protected void setupStage1() {
this.getScene().loadGroup(excel.getMazeGroupID1());
}
protected void setupStage2() {
this.getScene().loadGroup(excel.getMazeGroupID2());
}
private int getRoundsElapsed() { private int getRoundsElapsed() {
return getExcel().getChallengeCountDown() - this.roundsLeft; return getExcel().getChallengeCountDown() - this.roundsLeft;
} }
@@ -112,7 +104,8 @@ public class ChallengeInstance {
} else { } else {
// Increment and reset stage // Increment and reset stage
this.currentStage++; this.currentStage++;
this.setupStage2(); // Load scene group for stage 2
this.getScene().loadGroup(excel.getMazeGroupID2());
// Change player line up // Change player line up
this.setCurrentExtraLineup(ExtraLineupType.LINEUP_CHALLENGE_2); this.setCurrentExtraLineup(ExtraLineupType.LINEUP_CHALLENGE_2);
player.getLineupManager().setCurrentExtraLineup(this.getCurrentExtraLineup(), true); player.getLineupManager().setCurrentExtraLineup(this.getCurrentExtraLineup(), true);

View File

@@ -79,9 +79,6 @@ public class ChallengeManager extends BasePlayerManager {
// Save start positions // Save start positions
instance.getStartPos().set(getPlayer().getPos()); instance.getStartPos().set(getPlayer().getPos());
instance.getStartRot().set(getPlayer().getRot()); instance.getStartRot().set(getPlayer().getRot());
// Setup first challenge stage
instance.setupStage1();
// Send packet // Send packet
getPlayer().sendPacket(new PacketStartChallengeScRsp(getPlayer(), challengeId)); getPlayer().sendPacket(new PacketStartChallengeScRsp(getPlayer(), challengeId));

View File

@@ -21,6 +21,23 @@ import emu.lunarcore.util.Utils;
public class RogueEntityLoader extends SceneEntityLoader { public class RogueEntityLoader extends SceneEntityLoader {
@Override
public void onSceneLoad(Scene scene) {
// Make sure player is in a rogue instance
RogueInstance rogue = scene.getPlayer().getRogueInstance();
if (rogue == null) return;
// Get current room
RogueRoomData room = rogue.getCurrentRoom();
if (room == null) return;
// Load scene groups
for (int key : room.getExcel().getGroupWithContent().keySet()) {
scene.loadGroup(key);
}
}
@Override
public EntityMonster loadMonster(Scene scene, GroupInfo group, MonsterInfo monsterInfo) { public EntityMonster loadMonster(Scene scene, GroupInfo group, MonsterInfo monsterInfo) {
// Make sure player is in a rogue instance // Make sure player is in a rogue instance
RogueInstance rogue = scene.getPlayer().getRogueInstance(); RogueInstance rogue = scene.getPlayer().getRogueInstance();
@@ -45,6 +62,7 @@ public class RogueEntityLoader extends SceneEntityLoader {
return monster; return monster;
} }
@Override
public EntityProp loadProp(Scene scene, GroupInfo group, PropInfo propInfo) { public EntityProp loadProp(Scene scene, GroupInfo group, PropInfo propInfo) {
// Make sure player is in a rogue instance // Make sure player is in a rogue instance
RogueInstance rogue = scene.getPlayer().getRogueInstance(); RogueInstance rogue = scene.getPlayer().getRogueInstance();
@@ -102,6 +120,7 @@ public class RogueEntityLoader extends SceneEntityLoader {
return prop; return prop;
} }
@Override
public EntityNpc loadNpc(Scene scene, GroupInfo group, NpcInfo npcInfo) { public EntityNpc loadNpc(Scene scene, GroupInfo group, NpcInfo npcInfo) {
// Create npc from group npc info // Create npc from group npc info
EntityNpc npc = super.loadNpc(scene, group, npcInfo); EntityNpc npc = super.loadNpc(scene, group, npcInfo);

View File

@@ -169,7 +169,7 @@ public class RogueInstance {
public synchronized RogueRoomData enterRoom(int siteId) { public synchronized RogueRoomData enterRoom(int siteId) {
// Set status on previous room // Set status on previous room
RogueRoomData prevRoom = getCurrentRoom(); RogueRoomData prevRoom = this.getCurrentRoom();
if (prevRoom != null) { if (prevRoom != null) {
// Make sure the site we want to go into is connected to the current room we are in // Make sure the site we want to go into is connected to the current room we are in
if (!Utils.arrayContains(prevRoom.getNextSiteIds(), siteId)) { if (!Utils.arrayContains(prevRoom.getNextSiteIds(), siteId)) {
@@ -199,11 +199,6 @@ public class RogueInstance {
getPlayer().getRot().set(anchor.getRot()); getPlayer().getRot().set(anchor.getRot());
} }
// Load scene groups. THIS NEEDS TO BE LAST
for (int key : nextRoom.getExcel().getGroupWithContent().keySet()) {
getPlayer().getScene().loadGroup(key);
}
// Send packet if we are not entering the rogue instance for the first time // Send packet if we are not entering the rogue instance for the first time
if (prevRoom != null) { if (prevRoom != null) {
getPlayer().sendPacket(new PacketSyncRogueMapRoomScNotify(this, prevRoom)); getPlayer().sendPacket(new PacketSyncRogueMapRoomScNotify(this, prevRoom));

View File

@@ -95,15 +95,15 @@ public class RogueManager extends BasePlayerManager {
} }
// Get entrance id // Get entrance id
RogueInstance data = new RogueInstance(getPlayer(), rogueAreaExcel, aeonExcel); RogueInstance instance = new RogueInstance(getPlayer(), rogueAreaExcel, aeonExcel);
getPlayer().setRogueInstance(data); getPlayer().setRogueInstance(instance);
// Reset hp/sp // Reset hp/sp
lineup.forEachAvatar(avatar -> { lineup.forEachAvatar(avatar -> {
avatar.setCurrentHp(lineup, 10000); avatar.setCurrentHp(lineup, 10000);
avatar.setCurrentSp(lineup, avatar.getMaxSp()); avatar.setCurrentSp(lineup, avatar.getMaxSp());
data.getBaseAvatarIds().add(avatar.getAvatarId()); instance.getBaseAvatarIds().add(avatar.getAvatarId());
}); });
lineup.setMp(5); // Set technique points lineup.setMp(5); // Set technique points
@@ -111,7 +111,7 @@ public class RogueManager extends BasePlayerManager {
getPlayer().getLineupManager().setCurrentExtraLineup(ExtraLineupType.LINEUP_ROGUE, false); getPlayer().getLineupManager().setCurrentExtraLineup(ExtraLineupType.LINEUP_ROGUE, false);
// Enter rogue // Enter rogue
RogueRoomData room = data.enterRoom(data.getStartSiteId()); RogueRoomData room = instance.enterRoom(instance.getStartSiteId());
if (room == null) { if (room == null) {
// Reset lineup/instance if entering scene failed // Reset lineup/instance if entering scene failed

View File

@@ -5,7 +5,6 @@ import java.util.List;
import emu.lunarcore.data.GameData; import emu.lunarcore.data.GameData;
import emu.lunarcore.data.config.*; import emu.lunarcore.data.config.*;
import emu.lunarcore.data.config.GroupInfo.GroupLoadSide;
import emu.lunarcore.data.excel.MazePlaneExcel; import emu.lunarcore.data.excel.MazePlaneExcel;
import emu.lunarcore.game.avatar.GameAvatar; import emu.lunarcore.game.avatar.GameAvatar;
import emu.lunarcore.game.enums.PlaneType; import emu.lunarcore.game.enums.PlaneType;
@@ -85,28 +84,14 @@ public class Scene {
this.floorInfo = GameData.getFloorInfo(this.planeId, this.floorId); this.floorInfo = GameData.getFloorInfo(this.planeId, this.floorId);
if (floorInfo == null) return; if (floorInfo == null) return;
// Spawn from groups // Spawn entities from groups
if (getExcel().getPlaneType() != PlaneType.Challenge && getExcel().getPlaneType() != PlaneType.Rogue) { this.getPlaneType().getSceneEntityLoader().onSceneLoad(this);
this.initSpawns();
}
} }
public PlaneType getPlaneType() { public PlaneType getPlaneType() {
return this.getExcel().getPlaneType(); return this.getExcel().getPlaneType();
} }
private void initSpawns() {
for (GroupInfo group : getFloorInfo().getGroups().values()) {
// Skip non-server groups
if (group.getLoadSide() != GroupLoadSide.Server) {
continue;
}
// Load group
this.loadGroup(group);
}
}
public void loadGroup(int groupId) { public void loadGroup(int groupId) {
GroupInfo group = getFloorInfo().getGroups().get(groupId); GroupInfo group = getFloorInfo().getGroups().get(groupId);
if (group != null) { if (group != null) {
@@ -114,7 +99,7 @@ public class Scene {
} }
} }
private void loadGroup(GroupInfo group) { public void loadGroup(GroupInfo group) {
// Add monsters // Add monsters
if (group.getMonsterList() != null && group.getMonsterList().size() > 0) { if (group.getMonsterList() != null && group.getMonsterList().size() > 0) {
for (MonsterInfo monsterInfo : group.getMonsterList()) { for (MonsterInfo monsterInfo : group.getMonsterList()) {

View File

@@ -5,6 +5,7 @@ import emu.lunarcore.data.config.GroupInfo;
import emu.lunarcore.data.config.MonsterInfo; import emu.lunarcore.data.config.MonsterInfo;
import emu.lunarcore.data.config.NpcInfo; import emu.lunarcore.data.config.NpcInfo;
import emu.lunarcore.data.config.PropInfo; import emu.lunarcore.data.config.PropInfo;
import emu.lunarcore.data.config.GroupInfo.GroupLoadSide;
import emu.lunarcore.data.excel.NpcMonsterExcel; import emu.lunarcore.data.excel.NpcMonsterExcel;
import emu.lunarcore.data.excel.PropExcel; import emu.lunarcore.data.excel.PropExcel;
import emu.lunarcore.game.enums.PropState; import emu.lunarcore.game.enums.PropState;
@@ -16,6 +17,18 @@ import emu.lunarcore.game.scene.entity.GameEntity;
public class SceneEntityLoader { public class SceneEntityLoader {
public void onSceneLoad(Scene scene) {
for (GroupInfo group : scene.getFloorInfo().getGroups().values()) {
// Skip non-server groups
if (group.getLoadSide() != GroupLoadSide.Server) {
continue;
}
// Load group
scene.loadGroup(group);
}
}
public EntityMonster loadMonster(Scene scene, GroupInfo group, MonsterInfo monsterInfo) { public EntityMonster loadMonster(Scene scene, GroupInfo group, MonsterInfo monsterInfo) {
// Don't spawn entity if they have the IsDelete flag in group info // Don't spawn entity if they have the IsDelete flag in group info
if (monsterInfo.isIsDelete()) return null; if (monsterInfo.isIsDelete()) return null;