Files
bd2/go/internal/server/world/pack_summary.go
T

46 lines
1.2 KiB
Go

package world
import (
"bd2server/internal/server/wire"
"fmt"
)
func (s *Service) handlePackSummary(request []byte) (int, []byte, bool, error) {
seq, found, err := wire.Varint(request, 1)
if err != nil || !found || seq == 0 || seq > 0x7fffffff {
return 0, nil, true, fmt.Errorf("%w: PackSummaryInfoList missing or invalid sequence", ErrInvalidRequest)
}
var response []byte
for _, row := range s.packDBInfoRows() {
id, found, err := wire.Varint(row, 1)
if err != nil || !found {
return 0, nil, true, fmt.Errorf("world: invalid account pack row")
}
if !s.packSummaryTargets[int(id)] {
continue
}
ids, err := s.openedFieldObjects(int(id))
if err != nil {
return 0, nil, true, err
}
var once, regen uint64
for _, objectID := range ids {
object := s.fieldObjects[int(id)].Objects[objectID]
if object.Type == 2 {
once++
} else if object.Type == 1 || object.Type == 3 {
regen++
}
}
row := wire.AppendVarint(nil, 1, id)
if once > 0 {
row = wire.AppendVarint(row, 2, once)
}
if regen > 0 {
row = wire.AppendVarint(row, 3, regen)
}
response = wire.AppendBytes(response, 1, row)
}
return 625, response, true, nil
}