Add sound handling
parent
a19f26fada
commit
5484361b62
16
command.go
16
command.go
|
@ -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
|
||||
}
|
||||
|
|
|
@ -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 {
|
||||
|
|
2
peer.go
2
peer.go
|
@ -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
|
||||
|
|
22
redirect.go
22
redirect.go
|
@ -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
|
||||
}
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue