mirror of
https://github.com/Mezeporta/Erupe.git
synced 2025-12-15 16:34:51 +01:00
@@ -1,17 +1,18 @@
|
|||||||
package mhfpacket
|
package mhfpacket
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"errors"
|
"errors"
|
||||||
|
|
||||||
"erupe-ce/network/clientctx"
|
|
||||||
"erupe-ce/network"
|
|
||||||
"erupe-ce/common/byteframe"
|
"erupe-ce/common/byteframe"
|
||||||
|
_config "erupe-ce/config"
|
||||||
|
"erupe-ce/network"
|
||||||
|
"erupe-ce/network/clientctx"
|
||||||
)
|
)
|
||||||
|
|
||||||
// MsgMhfUpdateMyhouseInfo represents the MSG_MHF_UPDATE_MYHOUSE_INFO
|
// MsgMhfUpdateMyhouseInfo represents the MSG_MHF_UPDATE_MYHOUSE_INFO
|
||||||
type MsgMhfUpdateMyhouseInfo struct {
|
type MsgMhfUpdateMyhouseInfo struct {
|
||||||
AckHandle uint32
|
AckHandle uint32
|
||||||
Unk0 []byte
|
Data []byte
|
||||||
}
|
}
|
||||||
|
|
||||||
// Opcode returns the ID associated with this packet type.
|
// Opcode returns the ID associated with this packet type.
|
||||||
@@ -22,7 +23,16 @@ func (m *MsgMhfUpdateMyhouseInfo) Opcode() network.PacketID {
|
|||||||
// Parse parses the packet from binary
|
// Parse parses the packet from binary
|
||||||
func (m *MsgMhfUpdateMyhouseInfo) Parse(bf *byteframe.ByteFrame, ctx *clientctx.ClientContext) error {
|
func (m *MsgMhfUpdateMyhouseInfo) Parse(bf *byteframe.ByteFrame, ctx *clientctx.ClientContext) error {
|
||||||
m.AckHandle = bf.ReadUint32()
|
m.AckHandle = bf.ReadUint32()
|
||||||
m.Unk0 = bf.ReadBytes(0x16A)
|
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.Data = bf.ReadBytes(290)
|
||||||
|
}
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -19,7 +19,7 @@ const (
|
|||||||
pRP // +2
|
pRP // +2
|
||||||
pHouseTier // +5
|
pHouseTier // +5
|
||||||
pHouseData // +195
|
pHouseData // +195
|
||||||
pBookshelfData // +5576
|
pBookshelfData // +lBookshelfData
|
||||||
pGalleryData // +1748
|
pGalleryData // +1748
|
||||||
pToreData // +240
|
pToreData // +240
|
||||||
pGardenData // +68
|
pGardenData // +68
|
||||||
@@ -28,6 +28,7 @@ const (
|
|||||||
pHRP // +2
|
pHRP // +2
|
||||||
pGRP // +4
|
pGRP // +4
|
||||||
pKQF // +8
|
pKQF // +8
|
||||||
|
lBookshelfData
|
||||||
)
|
)
|
||||||
|
|
||||||
type CharacterSaveData struct {
|
type CharacterSaveData struct {
|
||||||
@@ -55,7 +56,7 @@ type CharacterSaveData struct {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func getPointers() map[SavePointer]int {
|
func getPointers() map[SavePointer]int {
|
||||||
pointers := map[SavePointer]int{pGender: 81}
|
pointers := map[SavePointer]int{pGender: 81, lBookshelfData: 5576}
|
||||||
switch _config.ErupeConfig.RealClientMode {
|
switch _config.ErupeConfig.RealClientMode {
|
||||||
case _config.ZZ:
|
case _config.ZZ:
|
||||||
pointers[pWeaponID] = 128522
|
pointers[pWeaponID] = 128522
|
||||||
@@ -83,6 +84,22 @@ func getPointers() map[SavePointer]int {
|
|||||||
pointers[pGardenData] = 106424
|
pointers[pGardenData] = 106424
|
||||||
pointers[pRP] = 106614
|
pointers[pRP] = 106614
|
||||||
pointers[pKQF] = 110720
|
pointers[pKQF] = 110720
|
||||||
|
case _config.F5, _config.F4:
|
||||||
|
pointers[pWeaponID] = 60522
|
||||||
|
pointers[pWeaponType] = 60789
|
||||||
|
pointers[pHouseTier] = 61900
|
||||||
|
pointers[pToreData] = 62228
|
||||||
|
pointers[pHRP] = 62550
|
||||||
|
pointers[pHouseData] = 62561
|
||||||
|
pointers[pBookshelfData] = 57118 // This pointer only half works
|
||||||
|
pointers[pGalleryData] = 72064
|
||||||
|
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
|
return pointers
|
||||||
}
|
}
|
||||||
@@ -179,6 +196,8 @@ func (save *CharacterSaveData) updateSaveDataWithStruct() {
|
|||||||
if _config.ErupeConfig.RealClientMode >= _config.G10 {
|
if _config.ErupeConfig.RealClientMode >= _config.G10 {
|
||||||
copy(save.decompSave[save.Pointers[pRP]:save.Pointers[pRP]+2], rpBytes)
|
copy(save.decompSave[save.Pointers[pRP]:save.Pointers[pRP]+2], rpBytes)
|
||||||
copy(save.decompSave[save.Pointers[pKQF]:save.Pointers[pKQF]+8], save.KQF)
|
copy(save.decompSave[save.Pointers[pKQF]:save.Pointers[pKQF]+8], save.KQF)
|
||||||
|
} else if _config.ErupeConfig.RealClientMode == _config.F5 || _config.ErupeConfig.RealClientMode == _config.F4 {
|
||||||
|
copy(save.decompSave[save.Pointers[pRP]:save.Pointers[pRP]+2], rpBytes)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -191,21 +210,24 @@ func (save *CharacterSaveData) updateStructWithSaveData() {
|
|||||||
save.Gender = false
|
save.Gender = false
|
||||||
}
|
}
|
||||||
if !save.IsNewCharacter {
|
if !save.IsNewCharacter {
|
||||||
if _config.ErupeConfig.RealClientMode >= _config.G10 {
|
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.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.HouseTier = save.decompSave[save.Pointers[pHouseTier] : save.Pointers[pHouseTier]+5]
|
||||||
save.HouseData = save.decompSave[save.Pointers[pHouseData] : save.Pointers[pHouseData]+195]
|
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.GalleryData = save.decompSave[save.Pointers[pGalleryData] : save.Pointers[pGalleryData]+1748]
|
||||||
save.ToreData = save.decompSave[save.Pointers[pToreData] : save.Pointers[pToreData]+240]
|
save.ToreData = save.decompSave[save.Pointers[pToreData] : save.Pointers[pToreData]+240]
|
||||||
save.GardenData = save.decompSave[save.Pointers[pGardenData] : save.Pointers[pGardenData]+68]
|
save.GardenData = save.decompSave[save.Pointers[pGardenData] : save.Pointers[pGardenData]+68]
|
||||||
save.WeaponType = save.decompSave[save.Pointers[pWeaponType]]
|
save.WeaponType = save.decompSave[save.Pointers[pWeaponType]]
|
||||||
save.WeaponID = binary.LittleEndian.Uint16(save.decompSave[save.Pointers[pWeaponID] : save.Pointers[pWeaponID]+2])
|
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])
|
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) {
|
if save.HRP == uint16(999) {
|
||||||
save.GR = grpToGR(binary.LittleEndian.Uint32(save.decompSave[save.Pointers[pGRP] : save.Pointers[pGRP]+4]))
|
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]
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return
|
return
|
||||||
|
|||||||
@@ -227,6 +227,7 @@ func handleMsgMhfInfoFesta(s *Session, p mhfpacket.MHFPacket) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// The Winner and Loser Armor IDs are missing
|
// The Winner and Loser Armor IDs are missing
|
||||||
|
// Item 7011 may not exist in older versions, remove to prevent crashes
|
||||||
rewards := []FestaReward{
|
rewards := []FestaReward{
|
||||||
{1, 0, 7, 350, 1520, 0, 0, 0},
|
{1, 0, 7, 350, 1520, 0, 0, 0},
|
||||||
{1, 0, 7, 1000, 7011, 0, 0, 1},
|
{1, 0, 7, 1000, 7011, 0, 0, 1},
|
||||||
@@ -254,6 +255,7 @@ func handleMsgMhfInfoFesta(s *Session, p mhfpacket.MHFPacket) {
|
|||||||
{5, 0, 13, 0, 0, 0, 0, 0},
|
{5, 0, 13, 0, 0, 0, 0, 0},
|
||||||
//{5, 0, 1, 0, 0, 0, 0, 0},
|
//{5, 0, 1, 0, 0, 0, 0, 0},
|
||||||
}
|
}
|
||||||
|
|
||||||
bf.WriteUint16(uint16(len(rewards)))
|
bf.WriteUint16(uint16(len(rewards)))
|
||||||
for _, reward := range rewards {
|
for _, reward := range rewards {
|
||||||
bf.WriteUint8(reward.Unk0)
|
bf.WriteUint8(reward.Unk0)
|
||||||
@@ -261,11 +263,13 @@ func handleMsgMhfInfoFesta(s *Session, p mhfpacket.MHFPacket) {
|
|||||||
bf.WriteUint16(reward.ItemType)
|
bf.WriteUint16(reward.ItemType)
|
||||||
bf.WriteUint16(reward.Quantity)
|
bf.WriteUint16(reward.Quantity)
|
||||||
bf.WriteUint16(reward.ItemID)
|
bf.WriteUint16(reward.ItemID)
|
||||||
bf.WriteUint16(reward.Unk5)
|
// Not confirmed to be G1 but exists in G3
|
||||||
bf.WriteUint16(reward.Unk6)
|
if _config.ErupeConfig.RealClientMode >= _config.G1 {
|
||||||
bf.WriteUint8(reward.Unk7)
|
bf.WriteUint16(reward.Unk5)
|
||||||
|
bf.WriteUint16(reward.Unk6)
|
||||||
|
bf.WriteUint8(reward.Unk7)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if _config.ErupeConfig.RealClientMode <= _config.G61 {
|
if _config.ErupeConfig.RealClientMode <= _config.G61 {
|
||||||
if s.server.erupeConfig.GameplayOptions.MaximumFP > 0xFFFF {
|
if s.server.erupeConfig.GameplayOptions.MaximumFP > 0xFFFF {
|
||||||
s.server.erupeConfig.GameplayOptions.MaximumFP = 0xFFFF
|
s.server.erupeConfig.GameplayOptions.MaximumFP = 0xFFFF
|
||||||
|
|||||||
@@ -119,7 +119,9 @@ func handleMsgMhfEnumerateHouse(s *Session, p mhfpacket.MHFPacket) {
|
|||||||
bf.WriteUint8(0)
|
bf.WriteUint8(0)
|
||||||
}
|
}
|
||||||
bf.WriteUint16(house.HRP)
|
bf.WriteUint16(house.HRP)
|
||||||
bf.WriteUint16(house.GR)
|
if _config.ErupeConfig.RealClientMode >= _config.G10 {
|
||||||
|
bf.WriteUint16(house.GR)
|
||||||
|
}
|
||||||
ps.Uint8(bf, house.Name, true)
|
ps.Uint8(bf, house.Name, true)
|
||||||
}
|
}
|
||||||
bf.Seek(0, 0)
|
bf.Seek(0, 0)
|
||||||
@@ -238,8 +240,8 @@ func handleMsgMhfGetMyhouseInfo(s *Session, p mhfpacket.MHFPacket) {
|
|||||||
|
|
||||||
func handleMsgMhfUpdateMyhouseInfo(s *Session, p mhfpacket.MHFPacket) {
|
func handleMsgMhfUpdateMyhouseInfo(s *Session, p mhfpacket.MHFPacket) {
|
||||||
pkt := p.(*mhfpacket.MsgMhfUpdateMyhouseInfo)
|
pkt := p.(*mhfpacket.MsgMhfUpdateMyhouseInfo)
|
||||||
s.server.db.Exec("UPDATE user_binary SET mission=$1 WHERE id=$2", pkt.Unk0, s.charID)
|
s.server.db.Exec("UPDATE user_binary SET mission=$1 WHERE id=$2", pkt.Data, s.charID)
|
||||||
doAckSimpleSucceed(s, pkt.AckHandle, []byte{0x00, 0x00, 0x00, 0x00})
|
doAckSimpleSucceed(s, pkt.AckHandle, make([]byte, 4))
|
||||||
}
|
}
|
||||||
|
|
||||||
func handleMsgMhfLoadDecoMyset(s *Session, p mhfpacket.MHFPacket) {
|
func handleMsgMhfLoadDecoMyset(s *Session, p mhfpacket.MHFPacket) {
|
||||||
|
|||||||
Reference in New Issue
Block a user