summaryrefslogtreecommitdiff
path: root/server
diff options
context:
space:
mode:
Diffstat (limited to 'server')
-rw-r--r--server/player.go11
1 files changed, 8 insertions, 3 deletions
diff --git a/server/player.go b/server/player.go
index b63bd94..6b03466 100644
--- a/server/player.go
+++ b/server/player.go
@@ -16,6 +16,7 @@ type player struct {
server *Server
name string
level *level
+ levelLoaded bool
}
type authLevel int
@@ -77,7 +78,7 @@ func (p *player) kick(reason string) {
}
func (p *player) handlePacket(packet classic.Packet) {
- if p.level == nil {
+ if p.level == nil || !p.levelLoaded {
return
}
switch pck := packet.(type) {
@@ -141,10 +142,11 @@ func (p *player) OnPacket(from phony.Actor, packet classic.Packet) {
}
func (p *player) joinLevel(id levelId, lvl *level, pos entityPos) {
- lvl.OnAddPlayer(p, p.name, pos)
- p.level = lvl
p.state.LevelId = id
p.state.Pos = pos
+ p.level = lvl
+ p.levelLoaded = false
+ lvl.OnAddPlayer(p, p.name, pos)
}
func (p *player) ChangeLevel(from phony.Actor, lvl levelId, pos entityPos) {
@@ -161,6 +163,8 @@ func (p *player) ChangeLevel(from phony.Actor, lvl levelId, pos entityPos) {
func (p *player) MovePlayer(
from phony.Actor, pos entityPos, facing entityFacing) {
p.Act(from, func() {
+ p.state.Pos = pos
+ p.state.Facing = facing
p.client.SendPacket(p, &classic.SpawnPlayer {
PlayerId: -1,
X: classic.FShort(pos.X),
@@ -238,6 +242,7 @@ func (p *player) OnLevelData(from *level, info levelInfo, data io.ReadCloser) {
Yaw: p.state.Facing.Yaw,
Pitch: p.state.Facing.Pitch,
})
+ p.levelLoaded = true
})
}