Add sound handling

master
HimbeerserverDE 2021-02-21 12:04:54 +01:00
parent a19f26fada
commit 5484361b62
No known key found for this signature in database
GPG Key ID: 1A651504791E6A8B
4 changed files with 34 additions and 7 deletions

View File

@ -162,6 +162,22 @@ func processPktCommand(src, dst *Peer, pkt *rudp.Pkt) bool {
id := binary.BigEndian.Uint32(pkt.Data[2:6])
dst.huds[id] = false
return false
case ToClientPlaySound:
id := int32(binary.BigEndian.Uint32(pkt.Data[2:6]))
namelen := binary.BigEndian.Uint16(pkt.Data[6:8])
objID := binary.BigEndian.Uint16(pkt.Data[17+namelen : 19+namelen])
if objID == dst.currentPlayerCao {
objID = dst.localPlayerCao
} else if objID == dst.localPlayerCao {
objID = dst.currentPlayerCao
}
binary.BigEndian.PutUint16(pkt.Data[17+namelen : 19+namelen], objID)
if loop := pkt.Data[19+namelen]; loop > 0 {
dst.sounds[id] = true
}
case ToClientStopSound:
id := int32(binary.BigEndian.Uint32(pkt.Data[2:6]))
dst.sounds[id] = false
default:
return false
}

View File

@ -50,6 +50,7 @@ func (l *Listener) Accept() (*Peer, error) {
clt.aoIDs = make(map[uint16]bool)
clt.modChs = make(map[string]bool)
clt.huds = make(map[uint32]bool)
clt.sounds = make(map[int32]bool)
maxPeers, ok := GetConfKey("player_limit").(int)
if !ok {

View File

@ -44,6 +44,8 @@ type Peer struct {
modChs map[string]bool
huds map[uint32]bool
sounds map[int32]bool
}
// Username returns the username of the Peer

View File

@ -94,7 +94,6 @@ func (p *Peer) Redirect(newsrv string) error {
if err != nil {
return err
}
//<-ack
p.aoIDs = make(map[uint16]bool)
@ -105,7 +104,6 @@ func (p *Peer) Redirect(newsrv string) error {
if err != nil {
return err
}
//<-ack
data = []byte{0, ToClientHudSetParam, 0, 2, 0, 0}
@ -113,7 +111,6 @@ func (p *Peer) Redirect(newsrv string) error {
if err != nil {
return err
}
//<-ack
data = []byte{0, ToClientHudSetParam, 0, 3, 0, 0}
@ -121,7 +118,6 @@ func (p *Peer) Redirect(newsrv string) error {
if err != nil {
return err
}
//<-ack
for hud := range p.huds {
data = make([]byte, 6)
@ -129,13 +125,26 @@ func (p *Peer) Redirect(newsrv string) error {
data[1] = uint8(ToClientHudRm)
binary.BigEndian.PutUint32(data[2:6], hud)
_, err = p.Send(rudp.Pkt{ChNo: 1, Data: data})
_, err = p.Send(rudp.Pkt{Data: data, ChNo: 1})
if err != nil {
return err
}
//<-ack
}
p.huds = make(map[uint32]bool)
// Stop looped sounds
for sound := range p.sounds {
data = make([]byte, 6)
data[0] = uint8(0x00)
data[1] = uint8(ToClientStopSound)
binary.BigEndian.PutUint32(data[2:6], uint32(sound))
_, err = p.Send(rudp.Pkt{Data: data})
}
p.sounds = make(map[int32]bool)
// Update detached inventories
if len(detachedinvs[newsrv]) > 0 {
for i := range detachedinvs[newsrv] {
@ -148,7 +157,6 @@ func (p *Peer) Redirect(newsrv string) error {
if err != nil {
return err
}
//<-ack
}
}