DungeonManager.java 2.47 KB
Newer Older
Melledy's avatar
Melledy committed
1
2
package emu.grasscutter.game.dungeons;

Melledy's avatar
Melledy committed
3
4
5
6
7
8
9
10
11
import emu.grasscutter.GameConstants;
import emu.grasscutter.Grasscutter;
import emu.grasscutter.data.GameData;
import emu.grasscutter.data.custom.ScenePointEntry;
import emu.grasscutter.data.def.DungeonData;
import emu.grasscutter.game.player.Player;
import emu.grasscutter.game.props.SceneType;
import emu.grasscutter.net.packet.BasePacket;
import emu.grasscutter.net.packet.PacketOpcodes;
Melledy's avatar
Melledy committed
12
import emu.grasscutter.server.game.GameServer;
Melledy's avatar
Melledy committed
13
14
15
import emu.grasscutter.server.packet.send.PacketDungeonEntryInfoRsp;
import emu.grasscutter.server.packet.send.PacketPlayerEnterDungeonRsp;
import emu.grasscutter.utils.Position;
Melledy's avatar
Melledy committed
16
17
18
19
20
21
22
23
24
25
26

public class DungeonManager {
	private final GameServer server;
	
	public DungeonManager(GameServer server) {
		this.server = server;
	}

	public GameServer getServer() {
		return server;
	}
Melledy's avatar
Melledy committed
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47

	public void getEntryInfo(Player player, int pointId) {
		ScenePointEntry entry = GameData.getScenePointEntryById(player.getScene().getId(), pointId);
		
		if (entry == null || entry.getPointData().getDungeonIds() == null) {
			// Error
			player.sendPacket(new PacketDungeonEntryInfoRsp());
			return;
		}
		
		player.sendPacket(new PacketDungeonEntryInfoRsp(player, entry.getPointData()));
	}

	public void enterDungeon(Player player, int pointId, int dungeonId) {
		DungeonData data = GameData.getDungeonDataMap().get(dungeonId);
		
		if (data == null) {
			return;
		}
		
		int sceneId = data.getSceneId();
48
		player.getScene().setPrevScene(sceneId);
Melledy's avatar
Melledy committed
49
50
51
		
		player.getWorld().transferPlayerToScene(player, sceneId, data);
		
52
		player.getScene().setPrevScenePoint(pointId);
Melledy's avatar
Melledy committed
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
		player.sendPacket(new PacketPlayerEnterDungeonRsp(pointId, dungeonId));
	}
	
	public void exitDungeon(Player player) {
		if (player.getScene().getSceneType() != SceneType.SCENE_DUNGEON) {
			return;
		}
		
		// Get previous scene
		int prevScene = player.getScene().getPrevScene() > 0 ? player.getScene().getPrevScene() : 3;
		
		// Get previous position
		DungeonData dungeonData = player.getScene().getDungeonData();
		Position prevPos = new Position(GameConstants.START_POSITION);
		
		if (dungeonData != null) {
69
			ScenePointEntry entry = GameData.getScenePointEntryById(prevScene, player.getScene().getPrevScenePoint());
Melledy's avatar
Melledy committed
70
71
72
73
74
75
76
77
78
79
			
			if (entry != null) {
				prevPos.set(entry.getPointData().getTranPos());
			}
		}

		// Transfer player back to world
		player.getWorld().transferPlayerToScene(player, prevScene, prevPos);
		player.sendPacket(new BasePacket(PacketOpcodes.PlayerQuitDungeonRsp));
	}
Melledy's avatar
Melledy committed
80
}