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",
"enabled": true,
"prefix": "!reload"
}, {
"name": "KeyQuest",
"enabled": false,
"prefix": "!kqf"
}
],
"database": {

View File

@@ -1,17 +1,17 @@
package channelserver
import (
"encoding/hex"
"erupe-ce/common/byteframe"
"erupe-ce/config"
"erupe-ce/network/binpacket"
"erupe-ce/network/mhfpacket"
"fmt"
"math"
"math/rand"
"strings"
"time"
"erupe-ce/common/byteframe"
"erupe-ce/config"
"erupe-ce/network/binpacket"
"erupe-ce/network/mhfpacket"
"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) {
// Set account rights
if commands["Rights"].Enabled {

View File

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

View File

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