diff --git a/server/channelserver/handlers_character.go b/server/channelserver/handlers_character.go index a3e671969..8499f9b17 100644 --- a/server/channelserver/handlers_character.go +++ b/server/channelserver/handlers_character.go @@ -2,6 +2,8 @@ package channelserver import ( "encoding/binary" + "erupe-ce/common/bfutil" + "erupe-ce/common/stringsupport" "erupe-ce/network/mhfpacket" "erupe-ce/server/channelserver/compression/nullcomp" @@ -135,6 +137,7 @@ func (save *CharacterSaveData) updateSaveDataWithStruct() { // This will update the save struct with the values stored in the character save func (save *CharacterSaveData) updateStructWithSaveData() { + save.Name = stringsupport.SJISToUTF8(bfutil.UpToNull(save.decompSave[88:100])) if save.decompSave[pointerGender] == 1 { save.Gender = true } else { diff --git a/server/channelserver/handlers_data.go b/server/channelserver/handlers_data.go index 28521d10d..83981a580 100644 --- a/server/channelserver/handlers_data.go +++ b/server/channelserver/handlers_data.go @@ -2,7 +2,6 @@ package channelserver import ( "encoding/hex" - "erupe-ce/common/bfutil" "erupe-ce/common/stringsupport" "fmt" "io" @@ -46,10 +45,14 @@ func handleMsgMhfSavedata(s *Session, p mhfpacket.MHFPacket) { characterSaveData.decompSave = saveData } characterSaveData.updateStructWithSaveData() - characterSaveData.Save(s) - s.logger.Info("Wrote recompressed savedata back to DB.") - - characterSaveData.Name = stringsupport.SJISToUTF8(bfutil.UpToNull(characterSaveData.decompSave[88:100])) + if characterSaveData.Name == s.Name { + characterSaveData.Save(s) + s.logger.Info("Wrote recompressed savedata back to DB.") + } else { + s.logger.Warn("Save cancelled due to corruption.") + s.rawConn.Close() + return + } _, err = s.server.db.Exec("UPDATE characters SET name=$1 WHERE id=$2", characterSaveData.Name, s.charID) if err != nil { s.logger.Fatal("Failed to update character name in db", zap.Error(err))