add KQF command

This commit is contained in:
wish
2022-09-30 03:47:59 +10:00
parent 6c323275a9
commit e90e3da142
4 changed files with 44 additions and 6 deletions

View File

@@ -46,6 +46,10 @@
"name": "Reload", "name": "Reload",
"enabled": true, "enabled": true,
"prefix": "!reload" "prefix": "!reload"
}, {
"name": "KeyQuest",
"enabled": false,
"prefix": "!kqf"
} }
], ],
"database": { "database": {

View File

@@ -1,17 +1,17 @@
package channelserver package channelserver
import ( import (
"encoding/hex"
"erupe-ce/common/byteframe"
"erupe-ce/config"
"erupe-ce/network/binpacket"
"erupe-ce/network/mhfpacket"
"fmt" "fmt"
"math" "math"
"math/rand" "math/rand"
"strings" "strings"
"time" "time"
"erupe-ce/common/byteframe"
"erupe-ce/config"
"erupe-ce/network/binpacket"
"erupe-ce/network/mhfpacket"
"go.uber.org/zap" "go.uber.org/zap"
) )
@@ -259,6 +259,27 @@ func handleMsgSysCastBinary(s *Session, p mhfpacket.MHFPacket) {
} }
} }
if strings.HasPrefix(chatMessage.Message, commands["KeyQuest"].Prefix) {
if commands["KeyQuest"].Enabled {
if strings.HasPrefix(chatMessage.Message, "!kqf get") {
sendServerChatMessage(s, fmt.Sprintf("KQF: %x", s.kqf))
} else if strings.HasPrefix(chatMessage.Message, "!kqf set") {
var hexs string
n, numerr := fmt.Sscanf(chatMessage.Message, "!kqf set %s", &hexs)
if numerr != nil || n != 1 || len(hexs) != 16 {
sendServerChatMessage(s, "Error in command. Format: !kqf set xxxxxxxxxxxxxxxx")
} else {
hexd, _ := hex.DecodeString(hexs)
s.kqf = hexd
s.kqfOverride = true
sendServerChatMessage(s, "KQF set, please switch Land/World")
}
}
} else {
sendDisabledCommandMessage(s, commands["KeyQuest"])
}
}
if strings.HasPrefix(chatMessage.Message, commands["Rights"].Prefix) { if strings.HasPrefix(chatMessage.Message, commands["Rights"].Prefix) {
// Set account rights // Set account rights
if commands["Rights"].Enabled { if commands["Rights"].Enabled {

View File

@@ -22,6 +22,7 @@ const (
pointerWeaponID = 0x1F60A // +2 pointerWeaponID = 0x1F60A // +2
pointerHRP = 0x1FDF6 // +2 pointerHRP = 0x1FDF6 // +2
pointerGRP = 0x1FDFC // +4 pointerGRP = 0x1FDFC // +4
pointerKQF = 0x23D20 // +8
) )
type CharacterSaveData struct { type CharacterSaveData struct {
@@ -41,6 +42,7 @@ type CharacterSaveData struct {
WeaponID uint16 WeaponID uint16
HRP uint16 HRP uint16
GR uint16 GR uint16
KQF []byte
compSave []byte compSave []byte
decompSave []byte decompSave []byte
@@ -80,9 +82,16 @@ func GetCharacterSaveData(s *Session, charID uint32) (*CharacterSaveData, error)
func (save *CharacterSaveData) Save(s *Session) { func (save *CharacterSaveData) Save(s *Session) {
// We need to update the save data byte array before we save it back to the DB // We need to update the save data byte array before we save it back to the DB
save.updateSaveDataWithStruct()
save.updateStructWithSaveData() save.updateStructWithSaveData()
if !s.kqfOverride {
s.kqf = save.KQF
} else {
save.KQF = s.kqf
}
save.updateSaveDataWithStruct()
err := save.Compress() err := save.Compress()
if err != nil { if err != nil {
s.logger.Error("Failed to compress savedata", zap.Error(err)) s.logger.Error("Failed to compress savedata", zap.Error(err))
@@ -122,6 +131,7 @@ func (save *CharacterSaveData) updateSaveDataWithStruct() {
rpBytes := make([]byte, 2) rpBytes := make([]byte, 2)
binary.LittleEndian.PutUint16(rpBytes, save.RP) binary.LittleEndian.PutUint16(rpBytes, save.RP)
copy(save.decompSave[pointerRP:pointerRP+2], rpBytes) copy(save.decompSave[pointerRP:pointerRP+2], rpBytes)
copy(save.decompSave[pointerKQF:pointerKQF+8], save.KQF)
} }
// This will update the save struct with the values stored in the character save // This will update the save struct with the values stored in the character save
@@ -142,6 +152,7 @@ func (save *CharacterSaveData) updateStructWithSaveData() {
save.WeaponID = binary.LittleEndian.Uint16(save.decompSave[pointerWeaponID : pointerWeaponID+2]) save.WeaponID = binary.LittleEndian.Uint16(save.decompSave[pointerWeaponID : pointerWeaponID+2])
save.HRP = binary.LittleEndian.Uint16(save.decompSave[pointerHRP : pointerHRP+2]) save.HRP = binary.LittleEndian.Uint16(save.decompSave[pointerHRP : pointerHRP+2])
save.GR = grpToGR(binary.LittleEndian.Uint32(save.decompSave[pointerGRP : pointerGRP+4])) save.GR = grpToGR(binary.LittleEndian.Uint32(save.decompSave[pointerGRP : pointerGRP+4]))
save.KQF = save.decompSave[pointerKQF : pointerKQF+8]
} }
func handleMsgMhfSexChanger(s *Session, p mhfpacket.MHFPacket) { func handleMsgMhfSexChanger(s *Session, p mhfpacket.MHFPacket) {

View File

@@ -39,6 +39,8 @@ type Session struct {
sessionStart int64 sessionStart int64
rights uint32 rights uint32
token string token string
kqf []byte
kqfOverride bool
semaphore *Semaphore // Required for the stateful MsgSysUnreserveStage packet. semaphore *Semaphore // Required for the stateful MsgSysUnreserveStage packet.