implement Quest caching

This commit is contained in:
wish
2023-11-16 21:51:28 +11:00
parent 15253cdc1f
commit 72bda06916
4 changed files with 15 additions and 0 deletions

View File

@@ -12,6 +12,7 @@
"ScreenshotAPIURL": "",
"DeleteOnSaveCorruption": false,
"ClientMode": "ZZ",
"QuestCacheExpiry": 300,
"DevMode": true,
"DevModeOptions": {
"AutoCreateAccount": true,

View File

@@ -79,6 +79,7 @@ type Config struct {
DeleteOnSaveCorruption bool // Attempts to save corrupted data will flag the save for deletion
ClientMode string
RealClientMode Mode
QuestCacheExpiry int // Number of seconds to keep quest data cached
DevMode bool
DevModeOptions DevModeOptions

View File

@@ -77,6 +77,11 @@ func handleMsgMhfSaveFavoriteQuest(s *Session, p mhfpacket.MHFPacket) {
}
func loadQuestFile(s *Session, questId int) []byte {
data, exists := s.server.questCacheData[questId]
if exists && s.server.questCacheTime[questId].Add(time.Duration(s.server.erupeConfig.QuestCacheExpiry)*time.Second).After(time.Now()) {
return data
}
file, err := os.ReadFile(filepath.Join(s.server.erupeConfig.BinPath, fmt.Sprintf("quests/%05dd0.bin", questId)))
if err != nil {
return nil
@@ -113,6 +118,8 @@ func loadQuestFile(s *Session, questId int) []byte {
}
questBody.WriteBytes(newStrings.Data())
s.server.questCacheData[questId] = questBody.Data()
s.server.questCacheTime[questId] = time.Now()
return questBody.Data()
}

View File

@@ -5,6 +5,7 @@ import (
"net"
"strings"
"sync"
"time"
"erupe-ce/common/byteframe"
ps "erupe-ce/common/pascalstring"
@@ -73,6 +74,9 @@ type Server struct {
name string
raviente *Raviente
questCacheData map[int][]byte
questCacheTime map[int]time.Time
}
type Raviente struct {
@@ -163,6 +167,8 @@ func NewServer(config *Config) *Server {
state: make([]uint32, 30),
support: make([]uint32, 30),
},
questCacheData: make(map[int][]byte),
questCacheTime: make(map[int]time.Time),
}
// Mezeporta