From 20272382500d79eb0f4889c9b472d047463ac589 Mon Sep 17 00:00:00 2001 From: Samboge Date: Wed, 27 Sep 2023 07:12:27 +0700 Subject: [PATCH 1/9] Fix for Festa Rewards and House Visit MHF-F5 Partial Fix for Forward 5 --- server/channelserver/handlers_character.go | 22 ++++++++++ server/channelserver/handlers_festa.go | 47 +++++++++++++++++----- server/channelserver/handlers_house.go | 5 ++- 3 files changed, 63 insertions(+), 11 deletions(-) diff --git a/server/channelserver/handlers_character.go b/server/channelserver/handlers_character.go index bdbd2f744..e6276e845 100644 --- a/server/channelserver/handlers_character.go +++ b/server/channelserver/handlers_character.go @@ -83,6 +83,17 @@ func getPointers() map[SavePointer]int { pointers[pGardenData] = 106424 pointers[pRP] = 106614 pointers[pKQF] = 110720 + case _config.F5: + pointers[pWeaponID] = 60522 + pointers[pWeaponType] = 60789 + pointers[pHouseTier] = 61900 + pointers[pToreData] = 60550 + pointers[pHRP] = 62550 + pointers[pHouseData] = 62651 + pointers[pBookshelfData] = 71928 + pointers[pGalleryData] = 72064 + pointers[pGardenData] = 74424 + pointers[pRP] = 74614 } return pointers } @@ -206,6 +217,17 @@ func (save *CharacterSaveData) updateStructWithSaveData() { save.GR = grpToGR(binary.LittleEndian.Uint32(save.decompSave[save.Pointers[pGRP] : save.Pointers[pGRP]+4])) } save.KQF = save.decompSave[save.Pointers[pKQF] : save.Pointers[pKQF]+8] + } else if _config.ErupeConfig.RealClientMode < _config.G10 { + save.RP = binary.LittleEndian.Uint16(save.decompSave[save.Pointers[pRP] : save.Pointers[pRP]+2]) + save.HouseTier = save.decompSave[save.Pointers[pHouseTier] : save.Pointers[pHouseTier]+5] + save.HouseData = save.decompSave[save.Pointers[pHouseData] : save.Pointers[pHouseData]+195] + save.BookshelfData = save.decompSave[save.Pointers[pBookshelfData] : save.Pointers[pBookshelfData]+2576] + save.GalleryData = save.decompSave[save.Pointers[pGalleryData] : save.Pointers[pGalleryData]+1748] + save.ToreData = save.decompSave[save.Pointers[pToreData] : save.Pointers[pToreData]+240] + save.GardenData = save.decompSave[save.Pointers[pGardenData] : save.Pointers[pGardenData]+68] + save.WeaponType = save.decompSave[save.Pointers[pWeaponType]] + save.WeaponID = binary.LittleEndian.Uint16(save.decompSave[save.Pointers[pWeaponID] : save.Pointers[pWeaponID]+2]) + save.HRP = binary.LittleEndian.Uint16(save.decompSave[save.Pointers[pHRP] : save.Pointers[pHRP]+2]) } } return diff --git a/server/channelserver/handlers_festa.go b/server/channelserver/handlers_festa.go index 95cc14e0d..4f3807fa2 100644 --- a/server/channelserver/handlers_festa.go +++ b/server/channelserver/handlers_festa.go @@ -162,6 +162,14 @@ type FestaReward struct { Unk7 uint8 } +type FestaRewardF5 struct { + Unk0 uint8 + Unk1 uint8 + ItemType uint16 + Quantity uint16 + ItemID uint16 +} + func handleMsgMhfInfoFesta(s *Session, p mhfpacket.MHFPacket) { pkt := p.(*mhfpacket.MsgMhfInfoFesta) bf := byteframe.NewByteFrame() @@ -254,18 +262,37 @@ func handleMsgMhfInfoFesta(s *Session, p mhfpacket.MHFPacket) { {5, 0, 13, 0, 0, 0, 0, 0}, //{5, 0, 1, 0, 0, 0, 0, 0}, } - bf.WriteUint16(uint16(len(rewards))) - for _, reward := range rewards { - bf.WriteUint8(reward.Unk0) - bf.WriteUint8(reward.Unk1) - bf.WriteUint16(reward.ItemType) - bf.WriteUint16(reward.Quantity) - bf.WriteUint16(reward.ItemID) - bf.WriteUint16(reward.Unk5) - bf.WriteUint16(reward.Unk6) - bf.WriteUint8(reward.Unk7) + + rewardsF5 := []FestaRewardF5{ + {1, 0, 7, 250, 1520}, + {1, 0, 12, 250, 0}, + {1, 0, 12, 250, 0}, + {1, 0, 12, 250, 0}, + {1, 0, 12, 250, 0}, } + if _config.ErupeConfig.RealClientMode >= _config.G1 { + bf.WriteUint16(uint16(len(rewards))) + for _, reward := range rewards { + bf.WriteUint8(reward.Unk0) + bf.WriteUint8(reward.Unk1) + bf.WriteUint16(reward.ItemType) + bf.WriteUint16(reward.Quantity) + bf.WriteUint16(reward.ItemID) + bf.WriteUint16(reward.Unk5) + bf.WriteUint16(reward.Unk6) + bf.WriteUint8(reward.Unk7) + } + } else if _config.ErupeConfig.RealClientMode == _config.F5{ + bf.WriteUint16(uint16(len(rewardsF5))) + for _, reward := range rewardsF5 { + bf.WriteUint8(reward.Unk0) + bf.WriteUint8(reward.Unk1) + bf.WriteUint16(reward.ItemType) + bf.WriteUint16(reward.Quantity) + bf.WriteUint16(reward.ItemID) + } + } if _config.ErupeConfig.RealClientMode <= _config.G61 { if s.server.erupeConfig.GameplayOptions.MaximumFP > 0xFFFF { s.server.erupeConfig.GameplayOptions.MaximumFP = 0xFFFF diff --git a/server/channelserver/handlers_house.go b/server/channelserver/handlers_house.go index 4cc53d303..c00c2be73 100644 --- a/server/channelserver/handlers_house.go +++ b/server/channelserver/handlers_house.go @@ -119,7 +119,10 @@ func handleMsgMhfEnumerateHouse(s *Session, p mhfpacket.MHFPacket) { bf.WriteUint8(0) } bf.WriteUint16(house.HRP) - bf.WriteUint16(house.GR) + //to skip GR for client below G1 + if _config.ErupeConfig.RealClientMode >= _config.G1{ + bf.WriteUint16(house.GR) + } ps.Uint8(bf, house.Name, true) } bf.Seek(0, 0) From 8f1317f49835d3138ad6f9b2a2b9c3064a464d22 Mon Sep 17 00:00:00 2001 From: Samboge Date: Wed, 27 Sep 2023 13:52:29 +0700 Subject: [PATCH 2/9] Fix RP for MHF-F5 forgot to modify updateSaveDataWithStruct() to include forward 5 --- server/channelserver/handlers_character.go | 2 ++ 1 file changed, 2 insertions(+) diff --git a/server/channelserver/handlers_character.go b/server/channelserver/handlers_character.go index e6276e845..301a17b63 100644 --- a/server/channelserver/handlers_character.go +++ b/server/channelserver/handlers_character.go @@ -190,6 +190,8 @@ func (save *CharacterSaveData) updateSaveDataWithStruct() { if _config.ErupeConfig.RealClientMode >= _config.G10 { copy(save.decompSave[save.Pointers[pRP]:save.Pointers[pRP]+2], rpBytes) copy(save.decompSave[save.Pointers[pKQF]:save.Pointers[pKQF]+8], save.KQF) + } else if _config.ErupeConfig.RealClientMode == _config.F5{ + copy(save.decompSave[save.Pointers[pRP]:save.Pointers[pRP]+2], rpBytes) } } From aecb6af9e507a0d2b2c620d58e10cf54339b7bf6 Mon Sep 17 00:00:00 2001 From: Samboge Date: Sun, 1 Oct 2023 08:03:14 +0700 Subject: [PATCH 3/9] My Mission Fix for MHF-F5 Client only sent 322 byte (32 header + 290 byte of data) --- network/mhfpacket/msg_mhf_update_myhouse_info.go | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/network/mhfpacket/msg_mhf_update_myhouse_info.go b/network/mhfpacket/msg_mhf_update_myhouse_info.go index 469920127..a66bc6aa2 100644 --- a/network/mhfpacket/msg_mhf_update_myhouse_info.go +++ b/network/mhfpacket/msg_mhf_update_myhouse_info.go @@ -6,6 +6,7 @@ import ( "erupe-ce/network/clientctx" "erupe-ce/network" "erupe-ce/common/byteframe" + _config "erupe-ce/config" ) // MsgMhfUpdateMyhouseInfo represents the MSG_MHF_UPDATE_MYHOUSE_INFO @@ -22,7 +23,11 @@ func (m *MsgMhfUpdateMyhouseInfo) Opcode() network.PacketID { // Parse parses the packet from binary func (m *MsgMhfUpdateMyhouseInfo) Parse(bf *byteframe.ByteFrame, ctx *clientctx.ClientContext) error { m.AckHandle = bf.ReadUint32() - m.Unk0 = bf.ReadBytes(0x16A) + if _config.ErupeConfig.RealClientMode == _config.F5 { + m.Unk0 = bf.ReadBytes(0x122) + } else { + m.Unk0 = bf.ReadBytes(0x16A) + } return nil } From 1e1790eb845a5bcb681319eb862f48cb5dc3038a Mon Sep 17 00:00:00 2001 From: wish Date: Sun, 1 Oct 2023 23:17:07 +1100 Subject: [PATCH 4/9] fix incorrect case for EnumerateHouse response --- server/channelserver/handlers_house.go | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/server/channelserver/handlers_house.go b/server/channelserver/handlers_house.go index c00c2be73..4676eeb79 100644 --- a/server/channelserver/handlers_house.go +++ b/server/channelserver/handlers_house.go @@ -119,8 +119,7 @@ func handleMsgMhfEnumerateHouse(s *Session, p mhfpacket.MHFPacket) { bf.WriteUint8(0) } bf.WriteUint16(house.HRP) - //to skip GR for client below G1 - if _config.ErupeConfig.RealClientMode >= _config.G1{ + if _config.ErupeConfig.RealClientMode >= _config.G10 { bf.WriteUint16(house.GR) } ps.Uint8(bf, house.Name, true) From 5d4a81a84f4b976f98d85fb08c247a68878dbf9d Mon Sep 17 00:00:00 2001 From: wish Date: Sun, 1 Oct 2023 23:18:23 +1100 Subject: [PATCH 5/9] fix BookshelfData length --- server/channelserver/handlers_character.go | 18 ++++++++++++------ 1 file changed, 12 insertions(+), 6 deletions(-) diff --git a/server/channelserver/handlers_character.go b/server/channelserver/handlers_character.go index 301a17b63..36687b11d 100644 --- a/server/channelserver/handlers_character.go +++ b/server/channelserver/handlers_character.go @@ -19,7 +19,7 @@ const ( pRP // +2 pHouseTier // +5 pHouseData // +195 - pBookshelfData // +5576 + pBookshelfData // +lBookshelfData pGalleryData // +1748 pToreData // +240 pGardenData // +68 @@ -28,6 +28,7 @@ const ( pHRP // +2 pGRP // +4 pKQF // +8 + lBookshelfData ) type CharacterSaveData struct { @@ -55,7 +56,7 @@ type CharacterSaveData struct { } func getPointers() map[SavePointer]int { - pointers := map[SavePointer]int{pGender: 81} + pointers := map[SavePointer]int{pGender: 81, lBookshelfData: 5576} switch _config.ErupeConfig.RealClientMode { case _config.ZZ: pointers[pWeaponID] = 128522 @@ -95,6 +96,11 @@ func getPointers() map[SavePointer]int { pointers[pGardenData] = 74424 pointers[pRP] = 74614 } + if _config.ErupeConfig.RealClientMode == _config.G5 { + pointers[lBookshelfData] = 5548 + } else if _config.ErupeConfig.RealClientMode <= _config.GG { + pointers[lBookshelfData] = 4520 + } return pointers } @@ -190,7 +196,7 @@ func (save *CharacterSaveData) updateSaveDataWithStruct() { if _config.ErupeConfig.RealClientMode >= _config.G10 { copy(save.decompSave[save.Pointers[pRP]:save.Pointers[pRP]+2], rpBytes) copy(save.decompSave[save.Pointers[pKQF]:save.Pointers[pKQF]+8], save.KQF) - } else if _config.ErupeConfig.RealClientMode == _config.F5{ + } else if _config.ErupeConfig.RealClientMode == _config.F5 { copy(save.decompSave[save.Pointers[pRP]:save.Pointers[pRP]+2], rpBytes) } } @@ -208,7 +214,7 @@ func (save *CharacterSaveData) updateStructWithSaveData() { save.RP = binary.LittleEndian.Uint16(save.decompSave[save.Pointers[pRP] : save.Pointers[pRP]+2]) save.HouseTier = save.decompSave[save.Pointers[pHouseTier] : save.Pointers[pHouseTier]+5] save.HouseData = save.decompSave[save.Pointers[pHouseData] : save.Pointers[pHouseData]+195] - save.BookshelfData = save.decompSave[save.Pointers[pBookshelfData] : save.Pointers[pBookshelfData]+5576] + save.BookshelfData = save.decompSave[save.Pointers[pBookshelfData] : save.Pointers[pBookshelfData]+save.Pointers[lBookshelfData]] save.GalleryData = save.decompSave[save.Pointers[pGalleryData] : save.Pointers[pGalleryData]+1748] save.ToreData = save.decompSave[save.Pointers[pToreData] : save.Pointers[pToreData]+240] save.GardenData = save.decompSave[save.Pointers[pGardenData] : save.Pointers[pGardenData]+68] @@ -219,11 +225,11 @@ func (save *CharacterSaveData) updateStructWithSaveData() { save.GR = grpToGR(binary.LittleEndian.Uint32(save.decompSave[save.Pointers[pGRP] : save.Pointers[pGRP]+4])) } save.KQF = save.decompSave[save.Pointers[pKQF] : save.Pointers[pKQF]+8] - } else if _config.ErupeConfig.RealClientMode < _config.G10 { + } else if _config.ErupeConfig.RealClientMode == _config.F5 { save.RP = binary.LittleEndian.Uint16(save.decompSave[save.Pointers[pRP] : save.Pointers[pRP]+2]) save.HouseTier = save.decompSave[save.Pointers[pHouseTier] : save.Pointers[pHouseTier]+5] save.HouseData = save.decompSave[save.Pointers[pHouseData] : save.Pointers[pHouseData]+195] - save.BookshelfData = save.decompSave[save.Pointers[pBookshelfData] : save.Pointers[pBookshelfData]+2576] + save.BookshelfData = save.decompSave[save.Pointers[pBookshelfData] : save.Pointers[pBookshelfData]+save.Pointers[lBookshelfData]] save.GalleryData = save.decompSave[save.Pointers[pGalleryData] : save.Pointers[pGalleryData]+1748] save.ToreData = save.decompSave[save.Pointers[pToreData] : save.Pointers[pToreData]+240] save.GardenData = save.decompSave[save.Pointers[pGardenData] : save.Pointers[pGardenData]+68] From 2539afb5d34058fae15d5d0a2152bc4c020d0dfe Mon Sep 17 00:00:00 2001 From: wish Date: Mon, 2 Oct 2023 00:45:28 +1100 Subject: [PATCH 6/9] simplify Festa reward data --- server/channelserver/handlers_festa.go | 49 +++++++------------------- 1 file changed, 13 insertions(+), 36 deletions(-) diff --git a/server/channelserver/handlers_festa.go b/server/channelserver/handlers_festa.go index 4f3807fa2..7ca50d9d1 100644 --- a/server/channelserver/handlers_festa.go +++ b/server/channelserver/handlers_festa.go @@ -162,14 +162,6 @@ type FestaReward struct { Unk7 uint8 } -type FestaRewardF5 struct { - Unk0 uint8 - Unk1 uint8 - ItemType uint16 - Quantity uint16 - ItemID uint16 -} - func handleMsgMhfInfoFesta(s *Session, p mhfpacket.MHFPacket) { pkt := p.(*mhfpacket.MsgMhfInfoFesta) bf := byteframe.NewByteFrame() @@ -235,6 +227,7 @@ func handleMsgMhfInfoFesta(s *Session, p mhfpacket.MHFPacket) { } // The Winner and Loser Armor IDs are missing + // Item 7011 may not exist in older versions, remove to prevent crashes rewards := []FestaReward{ {1, 0, 7, 350, 1520, 0, 0, 0}, {1, 0, 7, 1000, 7011, 0, 0, 1}, @@ -263,34 +256,18 @@ func handleMsgMhfInfoFesta(s *Session, p mhfpacket.MHFPacket) { //{5, 0, 1, 0, 0, 0, 0, 0}, } - rewardsF5 := []FestaRewardF5{ - {1, 0, 7, 250, 1520}, - {1, 0, 12, 250, 0}, - {1, 0, 12, 250, 0}, - {1, 0, 12, 250, 0}, - {1, 0, 12, 250, 0}, - } - - if _config.ErupeConfig.RealClientMode >= _config.G1 { - bf.WriteUint16(uint16(len(rewards))) - for _, reward := range rewards { - bf.WriteUint8(reward.Unk0) - bf.WriteUint8(reward.Unk1) - bf.WriteUint16(reward.ItemType) - bf.WriteUint16(reward.Quantity) - bf.WriteUint16(reward.ItemID) - bf.WriteUint16(reward.Unk5) - bf.WriteUint16(reward.Unk6) - bf.WriteUint8(reward.Unk7) - } - } else if _config.ErupeConfig.RealClientMode == _config.F5{ - bf.WriteUint16(uint16(len(rewardsF5))) - for _, reward := range rewardsF5 { - bf.WriteUint8(reward.Unk0) - bf.WriteUint8(reward.Unk1) - bf.WriteUint16(reward.ItemType) - bf.WriteUint16(reward.Quantity) - bf.WriteUint16(reward.ItemID) + bf.WriteUint16(uint16(len(rewards))) + for _, reward := range rewards { + bf.WriteUint8(reward.Unk0) + bf.WriteUint8(reward.Unk1) + bf.WriteUint16(reward.ItemType) + bf.WriteUint16(reward.Quantity) + bf.WriteUint16(reward.ItemID) + // Not confirmed to be G1 but exists in G3 + if _config.ErupeConfig.RealClientMode >= _config.G1 { + bf.WriteUint16(reward.Unk5) + bf.WriteUint16(reward.Unk6) + bf.WriteUint8(reward.Unk7) } } if _config.ErupeConfig.RealClientMode <= _config.G61 { From aa98e89d773eead437bcaa76eadf7be5727ef5bf Mon Sep 17 00:00:00 2001 From: wish Date: Mon, 2 Oct 2023 01:19:56 +1100 Subject: [PATCH 7/9] cover more versions with Hiden savedata --- .../mhfpacket/msg_mhf_update_myhouse_info.go | 21 ++++++++++++------- server/channelserver/handlers_house.go | 4 ++-- 2 files changed, 15 insertions(+), 10 deletions(-) diff --git a/network/mhfpacket/msg_mhf_update_myhouse_info.go b/network/mhfpacket/msg_mhf_update_myhouse_info.go index a66bc6aa2..c5bf26d7a 100644 --- a/network/mhfpacket/msg_mhf_update_myhouse_info.go +++ b/network/mhfpacket/msg_mhf_update_myhouse_info.go @@ -1,18 +1,18 @@ package mhfpacket -import ( - "errors" +import ( + "errors" - "erupe-ce/network/clientctx" - "erupe-ce/network" "erupe-ce/common/byteframe" _config "erupe-ce/config" + "erupe-ce/network" + "erupe-ce/network/clientctx" ) // MsgMhfUpdateMyhouseInfo represents the MSG_MHF_UPDATE_MYHOUSE_INFO type MsgMhfUpdateMyhouseInfo struct { AckHandle uint32 - Unk0 []byte + Data []byte } // Opcode returns the ID associated with this packet type. @@ -23,10 +23,15 @@ func (m *MsgMhfUpdateMyhouseInfo) Opcode() network.PacketID { // Parse parses the packet from binary func (m *MsgMhfUpdateMyhouseInfo) Parse(bf *byteframe.ByteFrame, ctx *clientctx.ClientContext) error { m.AckHandle = bf.ReadUint32() - if _config.ErupeConfig.RealClientMode == _config.F5 { - m.Unk0 = bf.ReadBytes(0x122) + if _config.ErupeConfig.RealClientMode >= _config.G10 { + m.Data = bf.ReadBytes(362) + } else if _config.ErupeConfig.RealClientMode >= _config.GG { + m.Data = bf.ReadBytes(338) + } else if _config.ErupeConfig.RealClientMode >= _config.F5 { + // G1 is a guess + m.Data = bf.ReadBytes(314) } else { - m.Unk0 = bf.ReadBytes(0x16A) + m.Data = bf.ReadBytes(290) } return nil } diff --git a/server/channelserver/handlers_house.go b/server/channelserver/handlers_house.go index 4676eeb79..560e73ec7 100644 --- a/server/channelserver/handlers_house.go +++ b/server/channelserver/handlers_house.go @@ -240,8 +240,8 @@ func handleMsgMhfGetMyhouseInfo(s *Session, p mhfpacket.MHFPacket) { func handleMsgMhfUpdateMyhouseInfo(s *Session, p mhfpacket.MHFPacket) { pkt := p.(*mhfpacket.MsgMhfUpdateMyhouseInfo) - s.server.db.Exec("UPDATE user_binary SET mission=$1 WHERE id=$2", pkt.Unk0, s.charID) - doAckSimpleSucceed(s, pkt.AckHandle, []byte{0x00, 0x00, 0x00, 0x00}) + s.server.db.Exec("UPDATE user_binary SET mission=$1 WHERE id=$2", pkt.Data, s.charID) + doAckSimpleSucceed(s, pkt.AckHandle, make([]byte, 4)) } func handleMsgMhfLoadDecoMyset(s *Session, p mhfpacket.MHFPacket) { From d389f110a82c22b0e4e68fcccf4afe83073215a0 Mon Sep 17 00:00:00 2001 From: wish Date: Mon, 2 Oct 2023 22:09:20 +1100 Subject: [PATCH 8/9] test new pointers --- server/channelserver/handlers_character.go | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/server/channelserver/handlers_character.go b/server/channelserver/handlers_character.go index 36687b11d..d4ecd65d6 100644 --- a/server/channelserver/handlers_character.go +++ b/server/channelserver/handlers_character.go @@ -84,14 +84,14 @@ func getPointers() map[SavePointer]int { pointers[pGardenData] = 106424 pointers[pRP] = 106614 pointers[pKQF] = 110720 - case _config.F5: + case _config.F5, _config.F4: pointers[pWeaponID] = 60522 pointers[pWeaponType] = 60789 pointers[pHouseTier] = 61900 - pointers[pToreData] = 60550 + pointers[pToreData] = 62228 pointers[pHRP] = 62550 - pointers[pHouseData] = 62651 - pointers[pBookshelfData] = 71928 + pointers[pHouseData] = 62561 + pointers[pBookshelfData] = 56830 pointers[pGalleryData] = 72064 pointers[pGardenData] = 74424 pointers[pRP] = 74614 @@ -196,7 +196,7 @@ func (save *CharacterSaveData) updateSaveDataWithStruct() { if _config.ErupeConfig.RealClientMode >= _config.G10 { copy(save.decompSave[save.Pointers[pRP]:save.Pointers[pRP]+2], rpBytes) copy(save.decompSave[save.Pointers[pKQF]:save.Pointers[pKQF]+8], save.KQF) - } else if _config.ErupeConfig.RealClientMode == _config.F5 { + } else if _config.ErupeConfig.RealClientMode == _config.F5 || _config.ErupeConfig.RealClientMode == _config.F4 { copy(save.decompSave[save.Pointers[pRP]:save.Pointers[pRP]+2], rpBytes) } } @@ -225,7 +225,7 @@ func (save *CharacterSaveData) updateStructWithSaveData() { save.GR = grpToGR(binary.LittleEndian.Uint32(save.decompSave[save.Pointers[pGRP] : save.Pointers[pGRP]+4])) } save.KQF = save.decompSave[save.Pointers[pKQF] : save.Pointers[pKQF]+8] - } else if _config.ErupeConfig.RealClientMode == _config.F5 { + } else if _config.ErupeConfig.RealClientMode == _config.F5 || _config.ErupeConfig.RealClientMode == _config.F4 { save.RP = binary.LittleEndian.Uint16(save.decompSave[save.Pointers[pRP] : save.Pointers[pRP]+2]) save.HouseTier = save.decompSave[save.Pointers[pHouseTier] : save.Pointers[pHouseTier]+5] save.HouseData = save.decompSave[save.Pointers[pHouseData] : save.Pointers[pHouseData]+195] From 8fbbf1382247e2681893554137983d86c7980e6c Mon Sep 17 00:00:00 2001 From: wish Date: Tue, 3 Oct 2023 00:48:37 +1100 Subject: [PATCH 9/9] use better Bookshelf pointer & simplify pointer assignment --- server/channelserver/handlers_character.go | 26 ++++++++-------------- 1 file changed, 9 insertions(+), 17 deletions(-) diff --git a/server/channelserver/handlers_character.go b/server/channelserver/handlers_character.go index d4ecd65d6..4c5802293 100644 --- a/server/channelserver/handlers_character.go +++ b/server/channelserver/handlers_character.go @@ -91,7 +91,7 @@ func getPointers() map[SavePointer]int { pointers[pToreData] = 62228 pointers[pHRP] = 62550 pointers[pHouseData] = 62561 - pointers[pBookshelfData] = 56830 + pointers[pBookshelfData] = 57118 // This pointer only half works pointers[pGalleryData] = 72064 pointers[pGardenData] = 74424 pointers[pRP] = 74614 @@ -210,22 +210,7 @@ func (save *CharacterSaveData) updateStructWithSaveData() { save.Gender = false } if !save.IsNewCharacter { - if _config.ErupeConfig.RealClientMode >= _config.G10 { - save.RP = binary.LittleEndian.Uint16(save.decompSave[save.Pointers[pRP] : save.Pointers[pRP]+2]) - save.HouseTier = save.decompSave[save.Pointers[pHouseTier] : save.Pointers[pHouseTier]+5] - save.HouseData = save.decompSave[save.Pointers[pHouseData] : save.Pointers[pHouseData]+195] - save.BookshelfData = save.decompSave[save.Pointers[pBookshelfData] : save.Pointers[pBookshelfData]+save.Pointers[lBookshelfData]] - save.GalleryData = save.decompSave[save.Pointers[pGalleryData] : save.Pointers[pGalleryData]+1748] - save.ToreData = save.decompSave[save.Pointers[pToreData] : save.Pointers[pToreData]+240] - save.GardenData = save.decompSave[save.Pointers[pGardenData] : save.Pointers[pGardenData]+68] - save.WeaponType = save.decompSave[save.Pointers[pWeaponType]] - save.WeaponID = binary.LittleEndian.Uint16(save.decompSave[save.Pointers[pWeaponID] : save.Pointers[pWeaponID]+2]) - save.HRP = binary.LittleEndian.Uint16(save.decompSave[save.Pointers[pHRP] : save.Pointers[pHRP]+2]) - if save.HRP == uint16(999) { - save.GR = grpToGR(binary.LittleEndian.Uint32(save.decompSave[save.Pointers[pGRP] : save.Pointers[pGRP]+4])) - } - save.KQF = save.decompSave[save.Pointers[pKQF] : save.Pointers[pKQF]+8] - } else if _config.ErupeConfig.RealClientMode == _config.F5 || _config.ErupeConfig.RealClientMode == _config.F4 { + if (_config.ErupeConfig.RealClientMode >= _config.F4 && _config.ErupeConfig.RealClientMode <= _config.F5) || _config.ErupeConfig.RealClientMode >= _config.G10 { save.RP = binary.LittleEndian.Uint16(save.decompSave[save.Pointers[pRP] : save.Pointers[pRP]+2]) save.HouseTier = save.decompSave[save.Pointers[pHouseTier] : save.Pointers[pHouseTier]+5] save.HouseData = save.decompSave[save.Pointers[pHouseData] : save.Pointers[pHouseData]+195] @@ -237,6 +222,13 @@ func (save *CharacterSaveData) updateStructWithSaveData() { save.WeaponID = binary.LittleEndian.Uint16(save.decompSave[save.Pointers[pWeaponID] : save.Pointers[pWeaponID]+2]) save.HRP = binary.LittleEndian.Uint16(save.decompSave[save.Pointers[pHRP] : save.Pointers[pHRP]+2]) } + + if _config.ErupeConfig.RealClientMode >= _config.G10 { + save.KQF = save.decompSave[save.Pointers[pKQF] : save.Pointers[pKQF]+8] + if save.HRP == uint16(999) { + save.GR = grpToGR(binary.LittleEndian.Uint32(save.decompSave[save.Pointers[pGRP] : save.Pointers[pGRP]+4])) + } + } } return }