summaryrefslogtreecommitdiff
path: root/server/player.go
diff options
context:
space:
mode:
Diffstat (limited to 'server/player.go')
-rw-r--r--server/player.go34
1 files changed, 17 insertions, 17 deletions
diff --git a/server/player.go b/server/player.go
index 9852833..bba6539 100644
--- a/server/player.go
+++ b/server/player.go
@@ -5,6 +5,7 @@ import (
"os"
"fmt"
"regexp"
+ "slices"
"strings"
"git.citrons.xyz/metronode/phony"
"git.citrons.xyz/metronode/classic"
@@ -230,7 +231,7 @@ func (p *player) GetInfo(from phony.Actor,
func (p *player) SendMessage(from phony.Actor, message string) {
p.Act(from, func() {
- p.client.SendPackets(p, processChatMessage(message))
+ p.client.SendPackets(p, slices.Values(processChatMessage(message)))
})
}
@@ -248,27 +249,26 @@ func (p *player) OnCommandError(from *Server, err string) {
func (p *player) OnLevelData(from *level, info levelInfo, data io.ReadCloser) {
p.Act(from, func() {
- defer data.Close()
if from != p.level {
return
}
- var packets []classic.Packet
- for {
- var packet classic.LevelDataChunk
- n, err := io.ReadFull(data, packet.Data[:])
- if err == io.EOF || err == io.ErrUnexpectedEOF {
- if n == 0 {
- break
+ packets := func(yield func(classic.Packet) bool) {
+ defer data.Close()
+ for {
+ var packet classic.LevelDataChunk
+ n, err := io.ReadFull(data, packet.Data[:])
+ if err == io.EOF || err == io.ErrUnexpectedEOF {
+ if n == 0 {
+ break
+ }
+ } else if err != nil {
+ panic(err)
+ }
+ packet.Length = int16(n)
+ if !yield(&packet) {
+ return
}
- } else if err != nil {
- panic(err)
}
- packet.Length = int16(n)
- packets = append(packets, &packet)
- }
- for i := 0; i < len(packets); i++ {
- chunk := packets[i].(*classic.LevelDataChunk)
- chunk.PercentComplete = byte(i * 100 / len(packets))
}
p.client.SendPackets(p, packets)
p.client.SendPacket(p, &classic.LevelFinalize {