mirror of
https://github.com/Mezeporta/Erupe.git
synced 2025-12-12 23:14:36 +01:00
raviente cleanup and fixes
This commit is contained in:
@@ -273,8 +273,6 @@ func handleMsgSysTime(s *Session, p mhfpacket.MHFPacket) {
|
||||
Timestamp: uint32(Time_Current_Adjusted().Unix()), // JP timezone
|
||||
}
|
||||
s.QueueSendMHF(resp)
|
||||
|
||||
s.notifyticker()
|
||||
}
|
||||
|
||||
func handleMsgSysIssueLogkey(s *Session, p mhfpacket.MHFPacket) {
|
||||
|
||||
@@ -194,7 +194,7 @@ func handleMsgSysCastBinary(s *Session, p mhfpacket.MHFPacket) {
|
||||
|
||||
// RAVI COMMANDS V2
|
||||
if strings.HasPrefix(chatMessage.Message, "!ravi") {
|
||||
if checkRaviSemaphore(s) {
|
||||
if getRaviSemaphore(s) != "" {
|
||||
s.server.raviente.Lock()
|
||||
if !strings.HasPrefix(chatMessage.Message, "!ravi ") {
|
||||
sendServerChatMessage(s, "No Raviente command specified!")
|
||||
@@ -203,7 +203,7 @@ func handleMsgSysCastBinary(s *Session, p mhfpacket.MHFPacket) {
|
||||
if s.server.raviente.register.startTime == 0 {
|
||||
s.server.raviente.register.startTime = s.server.raviente.register.postTime
|
||||
sendServerChatMessage(s, "The Great Slaying will begin in a moment")
|
||||
s.notifyall()
|
||||
s.notifyRavi()
|
||||
} else {
|
||||
sendServerChatMessage(s, "The Great Slaying has already begun!")
|
||||
}
|
||||
@@ -213,9 +213,9 @@ func handleMsgSysCastBinary(s *Session, p mhfpacket.MHFPacket) {
|
||||
if numerr != nil || n != 1 {
|
||||
sendServerChatMessage(s, "Error in command. Format: !ravi sm n")
|
||||
} else if s.server.raviente.state.damageMultiplier == 1 {
|
||||
if num > 65535 {
|
||||
sendServerChatMessage(s, "Raviente multiplier too high, defaulting to 20x")
|
||||
s.server.raviente.state.damageMultiplier = 65535
|
||||
if num > 32 {
|
||||
sendServerChatMessage(s, "Raviente multiplier too high, defaulting to 32x")
|
||||
s.server.raviente.state.damageMultiplier = 32
|
||||
} else {
|
||||
sendServerChatMessage(s, fmt.Sprintf("Raviente multiplier set to %dx", num))
|
||||
s.server.raviente.state.damageMultiplier = uint32(num)
|
||||
|
||||
@@ -3,13 +3,15 @@ package channelserver
|
||||
import (
|
||||
"erupe-ce/common/byteframe"
|
||||
"erupe-ce/network/mhfpacket"
|
||||
"strings"
|
||||
)
|
||||
|
||||
func handleMsgSysOperateRegister(s *Session, p mhfpacket.MHFPacket) {
|
||||
pkt := p.(*mhfpacket.MsgSysOperateRegister)
|
||||
bf := byteframe.NewByteFrameFromBytes(pkt.RawDataPayload)
|
||||
s.server.raviente.Lock()
|
||||
if pkt.SemaphoreID == s.server.raviente.state.semaphoreID {
|
||||
switch pkt.SemaphoreID {
|
||||
case 3:
|
||||
resp := byteframe.NewByteFrame()
|
||||
size := 6
|
||||
for i := 0; i < len(bf.Data())-1; i += size {
|
||||
@@ -31,7 +33,7 @@ func handleMsgSysOperateRegister(s *Session, p mhfpacket.MHFPacket) {
|
||||
resp.WriteUint32(*ref + data)
|
||||
*ref += data
|
||||
} else {
|
||||
resp.WriteUint32(*ref + data)
|
||||
resp.WriteUint32(*ref)
|
||||
}
|
||||
} else {
|
||||
resp.WriteUint32(*ref + data*damageMultiplier)
|
||||
@@ -47,7 +49,7 @@ func handleMsgSysOperateRegister(s *Session, p mhfpacket.MHFPacket) {
|
||||
}
|
||||
resp.WriteUint8(0)
|
||||
doAckBufSucceed(s, pkt.AckHandle, resp.Data())
|
||||
} else if pkt.SemaphoreID == s.server.raviente.support.semaphoreID {
|
||||
case 4:
|
||||
resp := byteframe.NewByteFrame()
|
||||
size := 6
|
||||
for i := 0; i < len(bf.Data())-1; i += size {
|
||||
@@ -72,7 +74,7 @@ func handleMsgSysOperateRegister(s *Session, p mhfpacket.MHFPacket) {
|
||||
}
|
||||
resp.WriteUint8(0)
|
||||
doAckBufSucceed(s, pkt.AckHandle, resp.Data())
|
||||
} else if pkt.SemaphoreID == s.server.raviente.register.semaphoreID {
|
||||
case 5:
|
||||
resp := byteframe.NewByteFrame()
|
||||
size := 6
|
||||
for i := 0; i < len(bf.Data())-1; i += size {
|
||||
@@ -103,7 +105,7 @@ func handleMsgSysOperateRegister(s *Session, p mhfpacket.MHFPacket) {
|
||||
switch op {
|
||||
case 2:
|
||||
resp.WriteUint32(*ref)
|
||||
resp.WriteUint32(*ref + uint32(data))
|
||||
resp.WriteUint32(*ref + data)
|
||||
*ref += data
|
||||
case 13:
|
||||
resp.WriteUint32(0)
|
||||
@@ -122,7 +124,7 @@ func handleMsgSysOperateRegister(s *Session, p mhfpacket.MHFPacket) {
|
||||
switch op {
|
||||
case 2:
|
||||
resp.WriteUint32(*ref)
|
||||
resp.WriteUint32(*ref + uint32(data))
|
||||
resp.WriteUint32(*ref + data)
|
||||
*ref += data
|
||||
case 13:
|
||||
resp.WriteUint32(0)
|
||||
@@ -137,7 +139,7 @@ func handleMsgSysOperateRegister(s *Session, p mhfpacket.MHFPacket) {
|
||||
switch op {
|
||||
case 2:
|
||||
resp.WriteUint32(*ref)
|
||||
resp.WriteUint32(*ref + uint32(data))
|
||||
resp.WriteUint32(*ref + data)
|
||||
*ref += data
|
||||
case 13:
|
||||
resp.WriteUint32(0)
|
||||
@@ -152,7 +154,7 @@ func handleMsgSysOperateRegister(s *Session, p mhfpacket.MHFPacket) {
|
||||
switch op {
|
||||
case 2:
|
||||
resp.WriteUint32(*ref)
|
||||
resp.WriteUint32(*ref + uint32(data))
|
||||
resp.WriteUint32(*ref + data)
|
||||
*ref += data
|
||||
case 13:
|
||||
resp.WriteUint32(0)
|
||||
@@ -175,7 +177,7 @@ func handleMsgSysOperateRegister(s *Session, p mhfpacket.MHFPacket) {
|
||||
switch op {
|
||||
case 2:
|
||||
resp.WriteUint32(*ref)
|
||||
resp.WriteUint32(*ref + uint32(data))
|
||||
resp.WriteUint32(*ref + data)
|
||||
*ref += data
|
||||
case 13:
|
||||
resp.WriteUint32(0)
|
||||
@@ -193,7 +195,7 @@ func handleMsgSysOperateRegister(s *Session, p mhfpacket.MHFPacket) {
|
||||
resp.WriteUint8(0)
|
||||
doAckBufSucceed(s, pkt.AckHandle, resp.Data())
|
||||
}
|
||||
s.notifyall()
|
||||
s.notifyRavi()
|
||||
s.server.raviente.Unlock()
|
||||
}
|
||||
|
||||
@@ -237,65 +239,36 @@ func handleMsgSysLoadRegister(s *Session, p mhfpacket.MHFPacket) {
|
||||
}
|
||||
}
|
||||
|
||||
func (s *Session) notifyall() {
|
||||
func (s *Session) notifyRavi() {
|
||||
var temp mhfpacket.MHFPacket
|
||||
raviNotif := byteframe.NewByteFrame()
|
||||
temp = &mhfpacket.MsgSysNotifyRegister{RegisterID: s.server.raviente.support.semaphoreID}
|
||||
temp = &mhfpacket.MsgSysNotifyRegister{RegisterID: 3}
|
||||
raviNotif.WriteUint16(uint16(temp.Opcode()))
|
||||
temp.Build(raviNotif, s.clientContext)
|
||||
temp = &mhfpacket.MsgSysNotifyRegister{RegisterID: s.server.raviente.state.semaphoreID}
|
||||
temp = &mhfpacket.MsgSysNotifyRegister{RegisterID: 4}
|
||||
raviNotif.WriteUint16(uint16(temp.Opcode()))
|
||||
temp.Build(raviNotif, s.clientContext)
|
||||
temp = &mhfpacket.MsgSysNotifyRegister{RegisterID: s.server.raviente.register.semaphoreID}
|
||||
temp = &mhfpacket.MsgSysNotifyRegister{RegisterID: 5}
|
||||
raviNotif.WriteUint16(uint16(temp.Opcode()))
|
||||
temp.Build(raviNotif, s.clientContext)
|
||||
raviNotif.WriteUint16(0x0010) // End it.
|
||||
if _, exists := s.server.semaphore["hs_l0u3B51J9k3"]; exists {
|
||||
for session := range s.server.semaphore["hs_l0u3B51J9k3"].clients {
|
||||
session.QueueSend(raviNotif.Data())
|
||||
}
|
||||
} else if _, exists := s.server.semaphore["hs_l0u3B5129k3"]; exists {
|
||||
for session := range s.server.semaphore["hs_l0u3B5129k3"].clients {
|
||||
session.QueueSend(raviNotif.Data())
|
||||
}
|
||||
} else if _, exists := s.server.semaphore["hs_l0u3B512Ak3"]; exists {
|
||||
for session := range s.server.semaphore["hs_l0u3B512Ak3"].clients {
|
||||
sema := getRaviSemaphore(s)
|
||||
if sema != "" {
|
||||
for session := range s.server.semaphore[sema].clients {
|
||||
session.QueueSend(raviNotif.Data())
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func checkRaviSemaphore(s *Session) bool {
|
||||
if _, exists := s.server.semaphore["hs_l0u3B51J9k3"]; exists {
|
||||
return true
|
||||
} else if _, exists := s.server.semaphore["hs_l0u3B5129k3"]; exists {
|
||||
return true
|
||||
} else if _, exists := s.server.semaphore["hs_l0u3B512Ak3"]; exists {
|
||||
return true
|
||||
func getRaviSemaphore(s *Session) string {
|
||||
for _, semaphore := range s.server.semaphore {
|
||||
if strings.HasPrefix(semaphore.id_semaphore, "hs_l0u3B5") && strings.HasSuffix(semaphore.id_semaphore, "3") {
|
||||
return semaphore.id_semaphore
|
||||
}
|
||||
}
|
||||
return false
|
||||
return ""
|
||||
}
|
||||
|
||||
//func releaseRaviSemaphore(s *Session) {
|
||||
// s.server.raviente.Lock()
|
||||
// if _, exists := s.server.semaphore["hs_l0u3B51J9k3"]; exists {
|
||||
// if len(s.server.semaphore["hs_l0u3B51J9k3"].reservedClientSlots) == 0 {
|
||||
// resetRavi(s)
|
||||
// }
|
||||
// }
|
||||
// if _, exists := s.server.semaphore["hs_l0u3B5129k3"]; exists {
|
||||
// if len(s.server.semaphore["hs_l0u3B5129k3"].reservedClientSlots) == 0 {
|
||||
// resetRavi(s)
|
||||
// }
|
||||
// }
|
||||
// if _, exists := s.server.semaphore["hs_l0u3B512Ak3"]; exists {
|
||||
// if len(s.server.semaphore["hs_l0u3B512Ak3"].reservedClientSlots) == 0 {
|
||||
// resetRavi(s)
|
||||
// }
|
||||
// }
|
||||
// s.server.raviente.Unlock()
|
||||
//}
|
||||
|
||||
func resetRavi(s *Session) {
|
||||
s.server.raviente.Lock()
|
||||
s.server.raviente.register.nextTime = 0
|
||||
@@ -312,16 +285,4 @@ func resetRavi(s *Session) {
|
||||
s.server.raviente.Unlock()
|
||||
}
|
||||
|
||||
// Unused
|
||||
func (s *Session) notifyticker() {
|
||||
if _, exists := s.server.semaphore["hs_l0u3B51J9k3"]; exists {
|
||||
s.server.semaphoreLock.Lock()
|
||||
getSemaphore := s.server.semaphore["hs_l0u3B51J9k3"]
|
||||
s.server.semaphoreLock.Unlock()
|
||||
if _, exists := getSemaphore.reservedClientSlots[s.charID]; exists {
|
||||
s.notifyall()
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func handleMsgSysNotifyRegister(s *Session, p mhfpacket.MHFPacket) {}
|
||||
|
||||
@@ -4,6 +4,7 @@ import (
|
||||
"erupe-ce/common/byteframe"
|
||||
"fmt"
|
||||
"go.uber.org/zap"
|
||||
"strconv"
|
||||
"strings"
|
||||
|
||||
"erupe-ce/network/mhfpacket"
|
||||
@@ -34,7 +35,7 @@ func destructEmptySemaphores(s *Session) {
|
||||
s.server.semaphoreLock.Unlock()
|
||||
delete(s.server.semaphore, id)
|
||||
s.server.semaphoreLock.Lock()
|
||||
if strings.HasPrefix(id, "hs_l0u3B51") {
|
||||
if strings.HasPrefix(id, "hs_l0u3B5") {
|
||||
releaseRaviSemaphore(s, sema)
|
||||
}
|
||||
s.logger.Debug("Destructed semaphore", zap.String("sema.id_semaphore", id))
|
||||
@@ -62,7 +63,7 @@ func handleMsgSysDeleteSemaphore(s *Session, p mhfpacket.MHFPacket) {
|
||||
s.server.semaphoreLock.Lock()
|
||||
for id, sema := range s.server.semaphore {
|
||||
if sema.id == sem {
|
||||
if strings.HasPrefix(id, "hs_l0u3B51") {
|
||||
if strings.HasPrefix(id, "hs_l0u3B5") {
|
||||
releaseRaviSemaphore(s, sema)
|
||||
s.server.semaphoreLock.Unlock()
|
||||
return
|
||||
@@ -86,14 +87,14 @@ func handleMsgSysCreateAcquireSemaphore(s *Session, p mhfpacket.MHFPacket) {
|
||||
fmt.Printf("Got reserve stage req, StageID: %v\n\n", SemaphoreID)
|
||||
if !exists {
|
||||
s.server.semaphoreLock.Lock()
|
||||
if strings.HasPrefix(SemaphoreID, "hs_l0u3B51") {
|
||||
s.server.semaphore[SemaphoreID] = NewSemaphore(s.server, SemaphoreID, 32)
|
||||
if strings.HasSuffix(SemaphoreID, "3") {
|
||||
s.server.raviente.state.semaphoreID = s.server.semaphore[SemaphoreID].id
|
||||
} else if strings.HasSuffix(SemaphoreID, "4") {
|
||||
s.server.raviente.support.semaphoreID = s.server.semaphore[SemaphoreID].id
|
||||
} else if strings.HasSuffix(SemaphoreID, "5") {
|
||||
s.server.raviente.register.semaphoreID = s.server.semaphore[SemaphoreID].id
|
||||
if strings.HasPrefix(SemaphoreID, "hs_l0u3B5") {
|
||||
suffix, _ := strconv.ParseUint(pkt.SemaphoreID[len(pkt.SemaphoreID)-1:], 10, 32)
|
||||
s.server.semaphore[SemaphoreID] = &Semaphore{
|
||||
id_semaphore: pkt.SemaphoreID,
|
||||
id: uint32(suffix),
|
||||
clients: make(map[*Session]uint32),
|
||||
reservedClientSlots: make(map[uint32]interface{}),
|
||||
maxPlayers: 32,
|
||||
}
|
||||
} else {
|
||||
s.server.semaphore[SemaphoreID] = NewSemaphore(s.server, SemaphoreID, 1)
|
||||
|
||||
@@ -93,7 +93,6 @@ type Raviente struct {
|
||||
}
|
||||
|
||||
type RavienteRegister struct {
|
||||
semaphoreID uint32
|
||||
nextTime uint32
|
||||
startTime uint32
|
||||
postTime uint32
|
||||
@@ -105,13 +104,11 @@ type RavienteRegister struct {
|
||||
}
|
||||
|
||||
type RavienteState struct {
|
||||
semaphoreID uint32
|
||||
damageMultiplier uint32
|
||||
stateData []uint32
|
||||
}
|
||||
|
||||
type RavienteSupport struct {
|
||||
semaphoreID uint32
|
||||
supportData []uint32
|
||||
}
|
||||
|
||||
@@ -155,7 +152,7 @@ func NewServer(config *Config) *Server {
|
||||
stages: make(map[string]*Stage),
|
||||
userBinaryParts: make(map[userBinaryPartID][]byte),
|
||||
semaphore: make(map[string]*Semaphore),
|
||||
semaphoreIndex: 0,
|
||||
semaphoreIndex: 5,
|
||||
discordBot: config.DiscordBot,
|
||||
name: config.Name,
|
||||
enable: config.Enable,
|
||||
@@ -408,6 +405,17 @@ func (s *Server) FindObjectByChar(charID uint32) *Object {
|
||||
}
|
||||
|
||||
func (s *Server) NextSemaphoreID() uint32 {
|
||||
s.semaphoreIndex = s.semaphoreIndex + 1
|
||||
for {
|
||||
exists := false
|
||||
s.semaphoreIndex = s.semaphoreIndex + 1
|
||||
for _, semaphore := range s.semaphore {
|
||||
if semaphore.id == s.semaphoreIndex {
|
||||
exists = true
|
||||
}
|
||||
}
|
||||
if exists == false {
|
||||
break
|
||||
}
|
||||
}
|
||||
return s.semaphoreIndex
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user