mirror of
https://github.com/Mezeporta/Erupe.git
synced 2025-12-14 16:04:38 +01:00
72 lines
1.5 KiB
Go
72 lines
1.5 KiB
Go
package channelserver
|
|
|
|
import (
|
|
"strings"
|
|
"sync"
|
|
)
|
|
|
|
type Raviente struct {
|
|
sync.Mutex
|
|
id uint16
|
|
register []uint32
|
|
state []uint32
|
|
support []uint32
|
|
}
|
|
|
|
func (server *ChannelServer) resetRaviente() {
|
|
for _, semaphore := range server.semaphore {
|
|
if strings.HasPrefix(semaphore.name, "hs_l0") {
|
|
return
|
|
}
|
|
}
|
|
server.logger.Debug("All Raviente Semaphores empty, resetting")
|
|
server.raviente.id = server.raviente.id + 1
|
|
server.raviente.register = make([]uint32, 30)
|
|
server.raviente.state = make([]uint32, 30)
|
|
server.raviente.support = make([]uint32, 30)
|
|
}
|
|
|
|
func (server *ChannelServer) GetRaviMultiplier() float64 {
|
|
raviSema := server.getRaviSemaphore()
|
|
if raviSema != nil {
|
|
var minPlayers int
|
|
if server.raviente.register[9] > 8 {
|
|
minPlayers = 24
|
|
} else {
|
|
minPlayers = 4
|
|
}
|
|
if len(raviSema.clients) > minPlayers {
|
|
return 1
|
|
}
|
|
return float64(minPlayers / len(raviSema.clients))
|
|
}
|
|
return 0
|
|
}
|
|
|
|
func (server *ChannelServer) UpdateRavi(semaID uint32, index uint8, value uint32, update bool) (uint32, uint32) {
|
|
var prev uint32
|
|
var dest *[]uint32
|
|
switch semaID {
|
|
case 0x40000:
|
|
switch index {
|
|
case 17, 28: // Ignore res and poison
|
|
break
|
|
default:
|
|
value = uint32(float64(value) * server.GetRaviMultiplier())
|
|
}
|
|
dest = &server.raviente.state
|
|
case 0x50000:
|
|
dest = &server.raviente.support
|
|
case 0x60000:
|
|
dest = &server.raviente.register
|
|
default:
|
|
return 0, 0
|
|
}
|
|
if update {
|
|
(*dest)[index] += value
|
|
} else {
|
|
(*dest)[index] = value
|
|
}
|
|
return prev, (*dest)[index]
|
|
}
|