diff --git a/Erupe/server/channelserver/handlers_cast_binary.go b/Erupe/server/channelserver/handlers_cast_binary.go index b4ad6e799..8a327dcc6 100644 --- a/Erupe/server/channelserver/handlers_cast_binary.go +++ b/Erupe/server/channelserver/handlers_cast_binary.go @@ -20,10 +20,10 @@ const ( // MSG_SYS_CAST[ED]_BINARY broadcast types enum const ( - BroadcastTypeTargeted = 0x01 - BroadcastTypeStage = 0x03 - BroadcastTypeRavi = 0x06 - BroadcastTypeWorld = 0x0a + BroadcastTypeTargeted = 0x01 + BroadcastTypeStage = 0x03 + BroadcastTypeSemaphore = 0x06 + BroadcastTypeWorld = 0x0a ) func sendServerChatMessage(s *Session, message string) { @@ -93,10 +93,24 @@ func handleMsgSysCastBinary(s *Session, p mhfpacket.MHFPacket) { s.server.BroadcastMHF(resp, s) case BroadcastTypeStage: s.stage.BroadcastMHF(resp, s) - case BroadcastTypeRavi: + case BroadcastTypeSemaphore: if pkt.MessageType == 1 { - session := s.server.semaphore["hs_l0u3B51J9k3"] + var session *Semaphore + if _, exists := s.server.semaphore["hs_l0u3B51J9k3"]; exists { + session = s.server.semaphore["hs_l0u3B51J9k3"] + } else if _, exists := s.server.semaphore["hs_l0u3B5129k3"]; exists { + session = s.server.semaphore["hs_l0u3B5129k3"] + } else if _, exists := s.server.semaphore["hs_l0u3B512Ak3"]; exists { + session = s.server.semaphore["hs_l0u3B512Ak3"] + } (*session).BroadcastMHF(resp, s) + } else { + s.Lock() + haveStage := s.stage != nil + if haveStage { + s.stage.BroadcastMHF(resp, s) + } + s.Unlock() } case BroadcastTypeTargeted: for _, targetID := range (*msgBinTargeted).TargetCharIDs { @@ -134,113 +148,66 @@ func handleMsgSysCastBinary(s *Session, p mhfpacket.MHFPacket) { s.server.discordSession.ChannelMessageSend(s.server.erupeConfig.Discord.ChannelID, message) } - // RAVI COMMANDS - 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 { - if strings.HasPrefix(chatMessage.Message, "!ravistart") { - row := s.server.db.QueryRow("SELECT raviposttime, ravistarted FROM raviregister WHERE refid = 12") - var raviPosted, raviStarted uint32 - err := row.Scan(&raviPosted, &raviStarted) - if err != nil { - panic(err) - return - } - if raviStarted == 0 { - sendServerChatMessage(s, fmt.Sprintf("Raviente will start in less than 10 seconds")) - s.server.db.Exec("UPDATE raviregister SET ravistarted = $1", raviPosted) - } else { - sendServerChatMessage(s, fmt.Sprintf("Raviente has already started")) - } - } - if strings.HasPrefix(chatMessage.Message, "!bressend") { - row := s.server.db.QueryRow("SELECT unknown20 FROM ravistate WHERE refid = 29") - var berserkRes uint32 - err := row.Scan(&berserkRes) - if err != nil { - panic(err) - return - } - if berserkRes > 0 { - sendServerChatMessage(s, fmt.Sprintf("Sending ressurection support")) - s.server.db.Exec("UPDATE ravistate SET unknown20 = $1", 0) - } else { - sendServerChatMessage(s, fmt.Sprintf("Ressurection support has not been requested")) - } - } - if strings.HasPrefix(chatMessage.Message, "!bsedsend") { - hprow := s.server.db.QueryRow("SELECT phase1hp, phase2hp, phase3hp, phase4hp, phase5hp FROM ravistate WHERE refid = 29") - var phase1HP, phase2HP, phase3HP, phase4HP, phase5HP uint32 - hperr := hprow.Scan(&phase1HP, &phase2HP, &phase3HP, &phase4HP, &phase5HP) - if hperr != nil { - panic(hperr) - return - } - row := s.server.db.QueryRow("SELECT support2 FROM ravisupport WHERE refid = 25") - var berserkTranq uint32 - err := row.Scan(&berserkTranq) - if err != nil { - panic(err) - return - } - sendServerChatMessage(s, fmt.Sprintf("Sending sedation support if requested")) - s.server.db.Exec("UPDATE ravisupport SET support2 = $1", (phase1HP + phase2HP + phase3HP + phase4HP + phase5HP)) - } - if strings.HasPrefix(chatMessage.Message, "!bsedreq") { - hprow := s.server.db.QueryRow("SELECT phase1hp, phase2hp, phase3hp, phase4hp, phase5hp FROM ravistate WHERE refid = 29") - var phase1HP, phase2HP, phase3HP, phase4HP, phase5HP uint32 - hperr := hprow.Scan(&phase1HP, &phase2HP, &phase3HP, &phase4HP, &phase5HP) - if hperr != nil { - panic(hperr) - return - } - row := s.server.db.QueryRow("SELECT support2 FROM ravisupport WHERE refid = 25") - var berserkTranq uint32 - err := row.Scan(&berserkTranq) - if err != nil { - panic(err) - return - } - sendServerChatMessage(s, fmt.Sprintf("Requesting sedation support")) - s.server.db.Exec("UPDATE ravisupport SET support2 = $1", ((phase1HP + phase2HP + phase3HP + phase4HP + phase5HP) + 12)) - } - if strings.HasPrefix(chatMessage.Message, "!setmultiplier ") { - var num uint8 - n, numerr := fmt.Sscanf(chatMessage.Message, "!setmultiplier %d", &num) - row := s.server.db.QueryRow("SELECT damagemultiplier FROM ravistate WHERE refid = 29") - var damageMultiplier uint32 - err := row.Scan(&damageMultiplier) - if err != nil { - panic(err) - return - } - if numerr != nil || n != 1 { - sendServerChatMessage(s, fmt.Sprintf("Please use the format !setmultiplier x")) - } else if damageMultiplier == 1 { - if num > 20 { - sendServerChatMessage(s, fmt.Sprintf("Max multiplier for Ravi is 20, setting to this value")) - s.server.db.Exec("UPDATE ravistate SET damagemultiplier = $1", 20) + // RAVI COMMANDS V2 + if strings.HasPrefix(chatMessage.Message, "!ravi") { + if checkRaviSemaphore(s) { + s.server.raviente.Lock() + if !strings.HasPrefix(chatMessage.Message, "!ravi ") { + sendServerChatMessage(s, "No Raviente command specified!") + } else { + if strings.HasPrefix(chatMessage.Message, "!ravi start") { + 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() } else { - sendServerChatMessage(s, fmt.Sprintf("Setting Ravi damage multiplier to %d", num)) - s.server.db.Exec("UPDATE ravistate SET damagemultiplier = $1", num) + sendServerChatMessage(s, "The Great Slaying has already begun!") } + } else if strings.HasPrefix(chatMessage.Message, "!ravi sm") || strings.HasPrefix(chatMessage.Message, "!ravi setmultiplier") { + var num uint16 + n, numerr := fmt.Sscanf(chatMessage.Message, "!ravi sm %d", &num) + 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 + } else { + sendServerChatMessage(s, fmt.Sprintf("Raviente multiplier set to %dx", num)) + s.server.raviente.state.damageMultiplier = uint32(num) + } + } else { + sendServerChatMessage(s, fmt.Sprintf("Raviente multiplier is already set to %dx!", s.server.raviente.state.damageMultiplier)) + } + } else if strings.HasPrefix(chatMessage.Message, "!ravi cm") || strings.HasPrefix(chatMessage.Message, "!ravi checkmultiplier") { + sendServerChatMessage(s, fmt.Sprintf("Raviente multiplier is currently %dx", s.server.raviente.state.damageMultiplier)) + } else if strings.HasPrefix(chatMessage.Message, "!ravi sr") || strings.HasPrefix(chatMessage.Message, "!ravi sendres") { + if s.server.raviente.state.stateData[28] > 0 { + sendServerChatMessage(s, "Sending resurrection support!") + s.server.raviente.state.stateData[28] = 0 + } else { + sendServerChatMessage(s, "Resurrection support has not been requested!") + } + } else if strings.HasPrefix(chatMessage.Message, "!ravi ss") || strings.HasPrefix(chatMessage.Message, "!ravi sendsed") { + sendServerChatMessage(s, "Sending sedation support if requested!") + // Total BerRavi HP + HP := s.server.raviente.state.stateData[0] + s.server.raviente.state.stateData[1] + s.server.raviente.state.stateData[2] + s.server.raviente.state.stateData[3] + s.server.raviente.state.stateData[4] + s.server.raviente.support.supportData[1] = HP + } else if strings.HasPrefix(chatMessage.Message, "!ravi rs") || strings.HasPrefix(chatMessage.Message, "!ravi reqsed") { + sendServerChatMessage(s, "Requesting sedation support!") + // Total BerRavi HP + HP := s.server.raviente.state.stateData[0] + s.server.raviente.state.stateData[1] + s.server.raviente.state.stateData[2] + s.server.raviente.state.stateData[3] + s.server.raviente.state.stateData[4] + s.server.raviente.support.supportData[1] = HP + 12 } else { - sendServerChatMessage(s, fmt.Sprintf("Multiplier can only be set once, please restart Ravi to set again")) + sendServerChatMessage(s, "Raviente command not recognised!") } } - if strings.HasPrefix(chatMessage.Message, "!checkmultiplier") { - var damageMultiplier uint32 - row := s.server.db.QueryRow("SELECT damagemultiplier FROM ravistate WHERE refid = 29").Scan(&damageMultiplier) - if row != nil { - return - } - sendServerChatMessage(s, fmt.Sprintf("Ravi's current damage multiplier is %d", damageMultiplier)) - } + } else { + sendServerChatMessage(s, "No one has joined the Great Slaying!") } + s.server.raviente.Unlock() } - // END OF RAVI COMMANDS + // END RAVI COMMANDS V2 if strings.HasPrefix(chatMessage.Message, "!tele ") { var x, y int16