mirror of
https://github.com/Melledy/LunarCore.git
synced 2025-12-14 06:14:45 +01:00
Move scene group loading into SceneEntityLoader
This commit is contained in:
@@ -16,6 +16,16 @@ import it.unimi.dsi.fastutil.ints.Int2ObjectMap;
|
||||
|
||||
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
|
||||
public EntityMonster loadMonster(Scene scene, GroupInfo group, MonsterInfo monsterInfo) {
|
||||
// Get challenge instance
|
||||
|
||||
@@ -67,14 +67,6 @@ public class ChallengeInstance {
|
||||
this.currentExtraLineup = type.getNumber();
|
||||
}
|
||||
|
||||
protected void setupStage1() {
|
||||
this.getScene().loadGroup(excel.getMazeGroupID1());
|
||||
}
|
||||
|
||||
protected void setupStage2() {
|
||||
this.getScene().loadGroup(excel.getMazeGroupID2());
|
||||
}
|
||||
|
||||
private int getRoundsElapsed() {
|
||||
return getExcel().getChallengeCountDown() - this.roundsLeft;
|
||||
}
|
||||
@@ -112,7 +104,8 @@ public class ChallengeInstance {
|
||||
} else {
|
||||
// Increment and reset stage
|
||||
this.currentStage++;
|
||||
this.setupStage2();
|
||||
// Load scene group for stage 2
|
||||
this.getScene().loadGroup(excel.getMazeGroupID2());
|
||||
// Change player line up
|
||||
this.setCurrentExtraLineup(ExtraLineupType.LINEUP_CHALLENGE_2);
|
||||
player.getLineupManager().setCurrentExtraLineup(this.getCurrentExtraLineup(), true);
|
||||
|
||||
@@ -79,9 +79,6 @@ public class ChallengeManager extends BasePlayerManager {
|
||||
// Save start positions
|
||||
instance.getStartPos().set(getPlayer().getPos());
|
||||
instance.getStartRot().set(getPlayer().getRot());
|
||||
|
||||
// Setup first challenge stage
|
||||
instance.setupStage1();
|
||||
|
||||
// Send packet
|
||||
getPlayer().sendPacket(new PacketStartChallengeScRsp(getPlayer(), challengeId));
|
||||
|
||||
@@ -21,6 +21,23 @@ import emu.lunarcore.util.Utils;
|
||||
|
||||
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) {
|
||||
// Make sure player is in a rogue instance
|
||||
RogueInstance rogue = scene.getPlayer().getRogueInstance();
|
||||
@@ -45,6 +62,7 @@ public class RogueEntityLoader extends SceneEntityLoader {
|
||||
return monster;
|
||||
}
|
||||
|
||||
@Override
|
||||
public EntityProp loadProp(Scene scene, GroupInfo group, PropInfo propInfo) {
|
||||
// Make sure player is in a rogue instance
|
||||
RogueInstance rogue = scene.getPlayer().getRogueInstance();
|
||||
@@ -102,6 +120,7 @@ public class RogueEntityLoader extends SceneEntityLoader {
|
||||
return prop;
|
||||
}
|
||||
|
||||
@Override
|
||||
public EntityNpc loadNpc(Scene scene, GroupInfo group, NpcInfo npcInfo) {
|
||||
// Create npc from group npc info
|
||||
EntityNpc npc = super.loadNpc(scene, group, npcInfo);
|
||||
|
||||
@@ -169,7 +169,7 @@ public class RogueInstance {
|
||||
|
||||
public synchronized RogueRoomData enterRoom(int siteId) {
|
||||
// Set status on previous room
|
||||
RogueRoomData prevRoom = getCurrentRoom();
|
||||
RogueRoomData prevRoom = this.getCurrentRoom();
|
||||
if (prevRoom != null) {
|
||||
// Make sure the site we want to go into is connected to the current room we are in
|
||||
if (!Utils.arrayContains(prevRoom.getNextSiteIds(), siteId)) {
|
||||
@@ -199,11 +199,6 @@ public class RogueInstance {
|
||||
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
|
||||
if (prevRoom != null) {
|
||||
getPlayer().sendPacket(new PacketSyncRogueMapRoomScNotify(this, prevRoom));
|
||||
|
||||
@@ -95,15 +95,15 @@ public class RogueManager extends BasePlayerManager {
|
||||
}
|
||||
|
||||
// Get entrance id
|
||||
RogueInstance data = new RogueInstance(getPlayer(), rogueAreaExcel, aeonExcel);
|
||||
getPlayer().setRogueInstance(data);
|
||||
RogueInstance instance = new RogueInstance(getPlayer(), rogueAreaExcel, aeonExcel);
|
||||
getPlayer().setRogueInstance(instance);
|
||||
|
||||
// Reset hp/sp
|
||||
lineup.forEachAvatar(avatar -> {
|
||||
avatar.setCurrentHp(lineup, 10000);
|
||||
avatar.setCurrentSp(lineup, avatar.getMaxSp());
|
||||
|
||||
data.getBaseAvatarIds().add(avatar.getAvatarId());
|
||||
instance.getBaseAvatarIds().add(avatar.getAvatarId());
|
||||
});
|
||||
lineup.setMp(5); // Set technique points
|
||||
|
||||
@@ -111,7 +111,7 @@ public class RogueManager extends BasePlayerManager {
|
||||
getPlayer().getLineupManager().setCurrentExtraLineup(ExtraLineupType.LINEUP_ROGUE, false);
|
||||
|
||||
// Enter rogue
|
||||
RogueRoomData room = data.enterRoom(data.getStartSiteId());
|
||||
RogueRoomData room = instance.enterRoom(instance.getStartSiteId());
|
||||
|
||||
if (room == null) {
|
||||
// Reset lineup/instance if entering scene failed
|
||||
|
||||
@@ -5,7 +5,6 @@ import java.util.List;
|
||||
|
||||
import emu.lunarcore.data.GameData;
|
||||
import emu.lunarcore.data.config.*;
|
||||
import emu.lunarcore.data.config.GroupInfo.GroupLoadSide;
|
||||
import emu.lunarcore.data.excel.MazePlaneExcel;
|
||||
import emu.lunarcore.game.avatar.GameAvatar;
|
||||
import emu.lunarcore.game.enums.PlaneType;
|
||||
@@ -85,28 +84,14 @@ public class Scene {
|
||||
this.floorInfo = GameData.getFloorInfo(this.planeId, this.floorId);
|
||||
if (floorInfo == null) return;
|
||||
|
||||
// Spawn from groups
|
||||
if (getExcel().getPlaneType() != PlaneType.Challenge && getExcel().getPlaneType() != PlaneType.Rogue) {
|
||||
this.initSpawns();
|
||||
}
|
||||
// Spawn entities from groups
|
||||
this.getPlaneType().getSceneEntityLoader().onSceneLoad(this);
|
||||
}
|
||||
|
||||
public PlaneType 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) {
|
||||
GroupInfo group = getFloorInfo().getGroups().get(groupId);
|
||||
if (group != null) {
|
||||
@@ -114,7 +99,7 @@ public class Scene {
|
||||
}
|
||||
}
|
||||
|
||||
private void loadGroup(GroupInfo group) {
|
||||
public void loadGroup(GroupInfo group) {
|
||||
// Add monsters
|
||||
if (group.getMonsterList() != null && group.getMonsterList().size() > 0) {
|
||||
for (MonsterInfo monsterInfo : group.getMonsterList()) {
|
||||
|
||||
@@ -5,6 +5,7 @@ import emu.lunarcore.data.config.GroupInfo;
|
||||
import emu.lunarcore.data.config.MonsterInfo;
|
||||
import emu.lunarcore.data.config.NpcInfo;
|
||||
import emu.lunarcore.data.config.PropInfo;
|
||||
import emu.lunarcore.data.config.GroupInfo.GroupLoadSide;
|
||||
import emu.lunarcore.data.excel.NpcMonsterExcel;
|
||||
import emu.lunarcore.data.excel.PropExcel;
|
||||
import emu.lunarcore.game.enums.PropState;
|
||||
@@ -16,6 +17,18 @@ import emu.lunarcore.game.scene.entity.GameEntity;
|
||||
|
||||
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) {
|
||||
// Don't spawn entity if they have the IsDelete flag in group info
|
||||
if (monsterInfo.isIsDelete()) return null;
|
||||
|
||||
Reference in New Issue
Block a user