mirror of
https://github.com/Melledy/LunarCore.git
synced 2025-12-14 14:24:37 +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 {
|
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
|
||||||
|
|||||||
@@ -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);
|
||||||
|
|||||||
@@ -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));
|
||||||
|
|||||||
@@ -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);
|
||||||
|
|||||||
@@ -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));
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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()) {
|
||||||
|
|||||||
@@ -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;
|
||||||
|
|||||||
Reference in New Issue
Block a user