From 6c9e39a5cd68a77a2aa8c6181848f873f0111df1 Mon Sep 17 00:00:00 2001 From: wish Date: Sun, 4 Sep 2022 15:52:50 +1000 Subject: [PATCH] fix savedata bugs --- server/channelserver/handlers_character.go | 12 ++++--- server/channelserver/handlers_data.go | 40 ---------------------- 2 files changed, 7 insertions(+), 45 deletions(-) diff --git a/server/channelserver/handlers_character.go b/server/channelserver/handlers_character.go index aa3ab5e72..825924508 100644 --- a/server/channelserver/handlers_character.go +++ b/server/channelserver/handlers_character.go @@ -18,6 +18,7 @@ const ( pointerGalleryData = 0x22320 // +1748 pointerToreData = 0x1FCB4 // +240 pointerGardenData = 0x22C58 // +68 + pointerWeaponType = 0x1F715 // +1 pointerWeaponID = 0x1F60A // +2 pointerHRP = 0x1FDF6 // +2 pointerGRP = 0x1FDFC // +4 @@ -36,9 +37,9 @@ type CharacterSaveData struct { GalleryData []byte ToreData []byte GardenData []byte + WeaponType uint8 WeaponID uint16 HRP uint16 - GRP uint32 GR uint16 compSave []byte @@ -80,6 +81,7 @@ 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() err := save.Compress() if err != nil { @@ -87,9 +89,8 @@ func (save *CharacterSaveData) Save(s *Session) { return } - updateSQL := `UPDATE characters SET savedata=$1, is_new_character=$3 WHERE id=$2` - - _, err = s.server.db.Exec(updateSQL, save.compSave, save.CharID, save.IsNewCharacter) + _, err = s.server.db.Exec(`UPDATE characters SET savedata=$1, is_new_character=$2, hrp=$3, gr=$4, is_female=$5, weapon_type=$6, weapon_id=$7 WHERE id=$8 + `, save.compSave, save.IsNewCharacter, save.HRP, save.GR, save.Gender, save.WeaponType, save.WeaponID, save.CharID) if err != nil { s.logger.Error("Failed to update savedata", zap.Error(err), zap.Uint32("charID", save.CharID)) } @@ -134,9 +135,10 @@ func (save *CharacterSaveData) updateStructWithSaveData() { save.GalleryData = save.decompSave[pointerGalleryData : pointerGalleryData+1748] save.ToreData = save.decompSave[pointerToreData : pointerToreData+240] save.GardenData = save.decompSave[pointerGardenData : pointerGardenData+68] + save.WeaponType = save.decompSave[pointerWeaponType] save.WeaponID = binary.LittleEndian.Uint16(save.decompSave[pointerWeaponID : pointerWeaponID+2]) save.HRP = binary.LittleEndian.Uint16(save.decompSave[pointerHRP : pointerHRP+2]) - save.GRP = binary.LittleEndian.Uint32(save.decompSave[pointerGRP : pointerGRP+4]) + save.GR = grpToGR(binary.LittleEndian.Uint32(save.decompSave[pointerGRP : pointerGRP+4])) } func handleMsgMhfSexChanger(s *Session, p mhfpacket.MHFPacket) { diff --git a/server/channelserver/handlers_data.go b/server/channelserver/handlers_data.go index 048aaff73..57a2641f9 100644 --- a/server/channelserver/handlers_data.go +++ b/server/channelserver/handlers_data.go @@ -49,46 +49,6 @@ func handleMsgMhfSavedata(s *Session, p mhfpacket.MHFPacket) { characterSaveData.Save(s) s.logger.Info("Wrote recompressed savedata back to DB.") - _, err = s.server.db.Exec("UPDATE characters SET weapon_type=$1 WHERE id=$2", uint16(characterSaveData.decompSave[128789]), s.charID) - if err != nil { - s.logger.Fatal("Failed to character weapon type in db", zap.Error(err)) - } - - s.myseries.houseTier = characterSaveData.HouseTier - s.myseries.houseData = characterSaveData.HouseData - s.myseries.bookshelfData = characterSaveData.BookshelfData - s.myseries.galleryData = characterSaveData.GalleryData - s.myseries.toreData = characterSaveData.ToreData - s.myseries.gardenData = characterSaveData.GardenData - - isFemale := characterSaveData.Gender - if isFemale { - _, err = s.server.db.Exec("UPDATE characters SET is_female=true WHERE id=$1", s.charID) - } else { - _, err = s.server.db.Exec("UPDATE characters SET is_female=false WHERE id=$1", s.charID) - } - if err != nil { - s.logger.Fatal("Failed to character gender in db", zap.Error(err)) - } - - _, err = s.server.db.Exec("UPDATE characters SET weapon_id=$1 WHERE id=$2", characterSaveData.WeaponID, s.charID) - if err != nil { - s.logger.Fatal("Failed to update character weapon id in db", zap.Error(err)) - } - - _, err = s.server.db.Exec("UPDATE characters SET hrp=$1 WHERE id=$2", characterSaveData.HRP, s.charID) - if err != nil { - s.logger.Fatal("Failed to update character hrp in db", zap.Error(err)) - } - - if characterSaveData.GRP > 0 { - characterSaveData.GR = grpToGR(characterSaveData.GRP) - } - _, err = s.server.db.Exec("UPDATE characters SET gr=$1 WHERE id=$2", characterSaveData.GR, s.charID) - if err != nil { - s.logger.Fatal("Failed to update character gr in db", zap.Error(err)) - } - characterSaveData.Name = s.clientContext.StrConv.MustDecode(bfutil.UpToNull(characterSaveData.decompSave[88:100])) _, err = s.server.db.Exec("UPDATE characters SET name=$1 WHERE id=$2", characterSaveData.Name, s.charID) if err != nil {