RealClientMode replaced for ClientID

This commit is contained in:
stratic-dev
2024-10-09 08:37:04 +01:00
parent e8fc650d49
commit 738a46a01b
32 changed files with 130 additions and 130 deletions

View File

@@ -77,7 +77,7 @@ type Config struct {
PatchServerFile string // File patch server override PatchServerFile string // File patch server override
DeleteOnSaveCorruption bool // Attempts to save corrupted data will flag the save for deletion DeleteOnSaveCorruption bool // Attempts to save corrupted data will flag the save for deletion
ClientMode string ClientMode string
RealClientMode Mode ClientID Mode
QuestCacheExpiry int // Number of seconds to keep quest data cached QuestCacheExpiry int // Number of seconds to keep quest data cached
CommandPrefix string // The prefix for commands CommandPrefix string // The prefix for commands
AutoCreateAccount bool // Automatically create accounts if they don't exist AutoCreateAccount bool // Automatically create accounts if they don't exist
@@ -350,16 +350,16 @@ func LoadConfig() (*Config, error) {
for i := range versionStrings { for i := range versionStrings {
if strings.ToUpper(c.ClientMode) == versionStrings[i] { if strings.ToUpper(c.ClientMode) == versionStrings[i] {
c.RealClientMode = Mode(i + 1) c.ClientID = Mode(i + 1)
c.ClientMode = strings.ToUpper(c.ClientMode) c.ClientMode = strings.ToUpper(c.ClientMode)
if c.RealClientMode <= G101 { if c.ClientID <= G101 {
c.ClientMode += " (Debug only)" c.ClientMode += " (Debug only)"
} }
} }
} }
if c.RealClientMode == 0 { if c.ClientID == 0 {
c.ClientMode = versionStrings[len(versionStrings)-1] c.ClientMode = versionStrings[len(versionStrings)-1]
c.RealClientMode = ZZ c.ClientID = ZZ
} }
if c.GameplayOptions.MinFeatureWeapons > c.GameplayOptions.MaxFeatureWeapons { if c.GameplayOptions.MinFeatureWeapons > c.GameplayOptions.MaxFeatureWeapons {

View File

@@ -51,7 +51,7 @@ func (cc *CryptConn) ReadPacket() ([]byte, error) {
var encryptedPacketBody []byte var encryptedPacketBody []byte
// Don't know when support for this was added, works in Forward.4, doesn't work in Season 6.0 // Don't know when support for this was added, works in Forward.4, doesn't work in Season 6.0
if _config.ErupeConfig.RealClientMode < _config.F1 { if _config.ErupeConfig.ClientID < _config.F1 {
encryptedPacketBody = make([]byte, cph.DataSize) encryptedPacketBody = make([]byte, cph.DataSize)
} else { } else {
encryptedPacketBody = make([]byte, uint32(cph.DataSize)+(uint32(cph.Pf0-0x03)*0x1000)) encryptedPacketBody = make([]byte, uint32(cph.DataSize)+(uint32(cph.Pf0-0x03)*0x1000))

View File

@@ -31,7 +31,7 @@ func (m *MsgMhfAcquireCafeItem) Parse(bf *byteframe.ByteFrame, ctx *clientctx.Cl
m.ItemType = bf.ReadUint16() m.ItemType = bf.ReadUint16()
m.ItemID = bf.ReadUint16() m.ItemID = bf.ReadUint16()
m.Quant = bf.ReadUint16() m.Quant = bf.ReadUint16()
if _config.ErupeConfig.RealClientMode >= _config.G1 { if _config.ErupeConfig.ClientID >= _config.G1 {
m.PointCost = bf.ReadUint32() m.PointCost = bf.ReadUint32()
} else { } else {
m.PointCost = uint32(bf.ReadUint16()) m.PointCost = uint32(bf.ReadUint16())

View File

@@ -27,10 +27,10 @@ func (m *MsgMhfApplyDistItem) Parse(bf *byteframe.ByteFrame, ctx *clientctx.Clie
m.AckHandle = bf.ReadUint32() m.AckHandle = bf.ReadUint32()
m.DistributionType = bf.ReadUint8() m.DistributionType = bf.ReadUint8()
m.DistributionID = bf.ReadUint32() m.DistributionID = bf.ReadUint32()
if _config.ErupeConfig.RealClientMode >= _config.G8 { if _config.ErupeConfig.ClientID >= _config.G8 {
m.Unk2 = bf.ReadUint32() m.Unk2 = bf.ReadUint32()
} }
if _config.ErupeConfig.RealClientMode >= _config.G10 { if _config.ErupeConfig.ClientID >= _config.G10 {
m.Unk3 = bf.ReadUint32() m.Unk3 = bf.ReadUint32()
} }
return nil return nil

View File

@@ -28,7 +28,7 @@ func (m *MsgMhfEnumerateDistItem) Parse(bf *byteframe.ByteFrame, ctx *clientctx.
m.DistType = bf.ReadUint8() m.DistType = bf.ReadUint8()
m.Unk1 = bf.ReadUint8() m.Unk1 = bf.ReadUint8()
m.Unk2 = bf.ReadUint16() // Maximum? Hardcoded to 256 m.Unk2 = bf.ReadUint16() // Maximum? Hardcoded to 256
if _config.ErupeConfig.RealClientMode >= _config.Z1 { if _config.ErupeConfig.ClientID >= _config.Z1 {
m.Unk3 = bf.ReadBytes(uint(bf.ReadUint8())) m.Unk3 = bf.ReadBytes(uint(bf.ReadUint8()))
} }
return nil return nil

View File

@@ -30,7 +30,7 @@ func (m *MsgMhfEnumerateQuest) Parse(bf *byteframe.ByteFrame, ctx *clientctx.Cli
m.Unk0 = bf.ReadUint8() m.Unk0 = bf.ReadUint8()
m.World = bf.ReadUint8() m.World = bf.ReadUint8()
m.Counter = bf.ReadUint16() m.Counter = bf.ReadUint16()
if _config.ErupeConfig.RealClientMode <= _config.Z1 { if _config.ErupeConfig.ClientID <= _config.Z1 {
m.Offset = uint16(bf.ReadUint8()) m.Offset = uint16(bf.ReadUint8())
} else { } else {
m.Offset = bf.ReadUint16() m.Offset = bf.ReadUint16()

View File

@@ -32,7 +32,7 @@ func (m *MsgMhfEnumerateShop) Parse(bf *byteframe.ByteFrame, ctx *clientctx.Clie
m.ShopID = bf.ReadUint32() m.ShopID = bf.ReadUint32()
m.Limit = bf.ReadUint16() m.Limit = bf.ReadUint16()
m.Unk3 = bf.ReadUint8() m.Unk3 = bf.ReadUint8()
if _config.ErupeConfig.RealClientMode >= _config.G2 { if _config.ErupeConfig.ClientID >= _config.G2 {
m.Unk4 = bf.ReadUint8() m.Unk4 = bf.ReadUint8()
m.Unk5 = bf.ReadUint32() m.Unk5 = bf.ReadUint32()
} }

View File

@@ -30,7 +30,7 @@ func (m *MsgMhfSavedata) Parse(bf *byteframe.ByteFrame, ctx *clientctx.ClientCon
m.AllocMemSize = bf.ReadUint32() m.AllocMemSize = bf.ReadUint32()
m.SaveType = bf.ReadUint8() m.SaveType = bf.ReadUint8()
m.Unk1 = bf.ReadUint32() m.Unk1 = bf.ReadUint32()
if _config.ErupeConfig.RealClientMode >= _config.G1 { if _config.ErupeConfig.ClientID >= _config.G1 {
m.DataSize = bf.ReadUint32() m.DataSize = bf.ReadUint32()
} }
if m.DataSize == 0 { // seems to be used when DataSize = 0 rather than on savetype? if m.DataSize == 0 { // seems to be used when DataSize = 0 rather than on savetype?

View File

@@ -32,12 +32,12 @@ func (m *MsgMhfStampcardStamp) Opcode() network.PacketID {
func (m *MsgMhfStampcardStamp) Parse(bf *byteframe.ByteFrame, ctx *clientctx.ClientContext) error { func (m *MsgMhfStampcardStamp) Parse(bf *byteframe.ByteFrame, ctx *clientctx.ClientContext) error {
m.AckHandle = bf.ReadUint32() m.AckHandle = bf.ReadUint32()
m.HR = bf.ReadUint16() m.HR = bf.ReadUint16()
if _config.ErupeConfig.RealClientMode >= _config.G1 { if _config.ErupeConfig.ClientID >= _config.G1 {
m.GR = bf.ReadUint16() m.GR = bf.ReadUint16()
} }
m.Stamps = bf.ReadUint16() m.Stamps = bf.ReadUint16()
bf.ReadUint16() // Zeroed bf.ReadUint16() // Zeroed
if _config.ErupeConfig.RealClientMode >= _config.Z2 { if _config.ErupeConfig.ClientID >= _config.Z2 {
m.Reward1 = uint16(bf.ReadUint32()) m.Reward1 = uint16(bf.ReadUint32())
m.Reward2 = uint16(bf.ReadUint32()) m.Reward2 = uint16(bf.ReadUint32())
m.Item1 = uint16(bf.ReadUint32()) m.Item1 = uint16(bf.ReadUint32())

View File

@@ -23,11 +23,11 @@ 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()
if _config.ErupeConfig.RealClientMode >= _config.G10 { if _config.ErupeConfig.ClientID >= _config.G10 {
m.Data = bf.ReadBytes(362) m.Data = bf.ReadBytes(362)
} else if _config.ErupeConfig.RealClientMode >= _config.GG { } else if _config.ErupeConfig.ClientID >= _config.GG {
m.Data = bf.ReadBytes(338) m.Data = bf.ReadBytes(338)
} else if _config.ErupeConfig.RealClientMode >= _config.F5 { } else if _config.ErupeConfig.ClientID >= _config.F5 {
// G1 is a guess // G1 is a guess
m.Data = bf.ReadBytes(314) m.Data = bf.ReadBytes(314)
} else { } else {

View File

@@ -25,7 +25,7 @@ func (m *MsgSysCreateAcquireSemaphore) Opcode() network.PacketID {
func (m *MsgSysCreateAcquireSemaphore) Parse(bf *byteframe.ByteFrame, ctx *clientctx.ClientContext) error { func (m *MsgSysCreateAcquireSemaphore) Parse(bf *byteframe.ByteFrame, ctx *clientctx.ClientContext) error {
m.AckHandle = bf.ReadUint32() m.AckHandle = bf.ReadUint32()
m.Unk0 = bf.ReadUint16() m.Unk0 = bf.ReadUint16()
if _config.ErupeConfig.RealClientMode >= _config.S7 { // Assuming this was added with Ravi? if _config.ErupeConfig.ClientID >= _config.S7 { // Assuming this was added with Ravi?
m.PlayerCount = bf.ReadUint8() m.PlayerCount = bf.ReadUint8()
} }
bf.ReadUint8() // SemaphoreID length bf.ReadUint8() // SemaphoreID length

View File

@@ -26,7 +26,7 @@ func (m *MsgSysCreateSemaphore) Opcode() network.PacketID {
func (m *MsgSysCreateSemaphore) Parse(bf *byteframe.ByteFrame, ctx *clientctx.ClientContext) error { func (m *MsgSysCreateSemaphore) Parse(bf *byteframe.ByteFrame, ctx *clientctx.ClientContext) error {
m.AckHandle = bf.ReadUint32() m.AckHandle = bf.ReadUint32()
m.Unk0 = bf.ReadUint16() m.Unk0 = bf.ReadUint16()
if _config.ErupeConfig.RealClientMode >= _config.S7 { // Assuming this was added with Ravi? if _config.ErupeConfig.ClientID >= _config.S7 { // Assuming this was added with Ravi?
m.PlayerCount = bf.ReadUint8() m.PlayerCount = bf.ReadUint8()
} }
bf.ReadUint8() // SemaphoreID length bf.ReadUint8() // SemaphoreID length

View File

@@ -49,7 +49,7 @@ func (m *MsgSysTerminalLog) Parse(bf *byteframe.ByteFrame, ctx *clientctx.Client
e.Unk1 = bf.ReadInt32() e.Unk1 = bf.ReadInt32()
e.Unk2 = bf.ReadInt32() e.Unk2 = bf.ReadInt32()
e.Unk3 = bf.ReadInt32() e.Unk3 = bf.ReadInt32()
if _config.ErupeConfig.RealClientMode >= _config.G1 { if _config.ErupeConfig.ClientID >= _config.G1 {
for j := 0; j < 4; j++ { for j := 0; j < 4; j++ {
e.Unk4 = append(e.Unk4, bf.ReadInt32()) e.Unk4 = append(e.Unk4, bf.ReadInt32())
} }

View File

@@ -306,7 +306,7 @@ func handleMsgSysIssueLogkey(s *Session, p mhfpacket.MHFPacket) {
func handleMsgSysRecordLog(s *Session, p mhfpacket.MHFPacket) { func handleMsgSysRecordLog(s *Session, p mhfpacket.MHFPacket) {
pkt := p.(*mhfpacket.MsgSysRecordLog) pkt := p.(*mhfpacket.MsgSysRecordLog)
if _config.ErupeConfig.RealClientMode == _config.ZZ { if _config.ErupeConfig.ClientID == _config.ZZ {
bf := byteframe.NewByteFrameFromBytes(pkt.Data) bf := byteframe.NewByteFrameFromBytes(pkt.Data)
bf.Seek(32, 0) bf.Seek(32, 0)
var val uint8 var val uint8
@@ -428,7 +428,7 @@ func handleMsgMhfTransitMessage(s *Session, p mhfpacket.MHFPacket) {
resp.WriteUint16(uint16(len(c.userBinaryParts[userBinaryPartID{charID: session.charID, index: 3}]))) resp.WriteUint16(uint16(len(c.userBinaryParts[userBinaryPartID{charID: session.charID, index: 3}])))
// TODO: This case might be <=G2 // TODO: This case might be <=G2
if _config.ErupeConfig.RealClientMode <= _config.G1 { if _config.ErupeConfig.ClientID <= _config.G1 {
resp.WriteBytes(make([]byte, 8)) resp.WriteBytes(make([]byte, 8))
} else { } else {
resp.WriteBytes(make([]byte, 40)) resp.WriteBytes(make([]byte, 40))
@@ -459,7 +459,7 @@ func handleMsgMhfTransitMessage(s *Session, p mhfpacket.MHFPacket) {
case 0: case 0:
values := bf.ReadUint8() values := bf.ReadUint8()
for i := uint8(0); i < values; i++ { for i := uint8(0); i < values; i++ {
if _config.ErupeConfig.RealClientMode >= _config.Z1 { if _config.ErupeConfig.ClientID >= _config.Z1 {
findPartyParams.RankRestriction = bf.ReadInt16() findPartyParams.RankRestriction = bf.ReadInt16()
} else { } else {
findPartyParams.RankRestriction = int16(bf.ReadInt8()) findPartyParams.RankRestriction = int16(bf.ReadInt8())
@@ -468,7 +468,7 @@ func handleMsgMhfTransitMessage(s *Session, p mhfpacket.MHFPacket) {
case 1: case 1:
values := bf.ReadUint8() values := bf.ReadUint8()
for i := uint8(0); i < values; i++ { for i := uint8(0); i < values; i++ {
if _config.ErupeConfig.RealClientMode >= _config.Z1 { if _config.ErupeConfig.ClientID >= _config.Z1 {
findPartyParams.Targets = append(findPartyParams.Targets, bf.ReadInt16()) findPartyParams.Targets = append(findPartyParams.Targets, bf.ReadInt16())
} else { } else {
findPartyParams.Targets = append(findPartyParams.Targets, int16(bf.ReadInt8())) findPartyParams.Targets = append(findPartyParams.Targets, int16(bf.ReadInt8()))
@@ -478,7 +478,7 @@ func handleMsgMhfTransitMessage(s *Session, p mhfpacket.MHFPacket) {
values := bf.ReadUint8() values := bf.ReadUint8()
for i := uint8(0); i < values; i++ { for i := uint8(0); i < values; i++ {
var value int16 var value int16
if _config.ErupeConfig.RealClientMode >= _config.Z1 { if _config.ErupeConfig.ClientID >= _config.Z1 {
value = bf.ReadInt16() value = bf.ReadInt16()
} else { } else {
value = int16(bf.ReadInt8()) value = int16(bf.ReadInt8())
@@ -499,7 +499,7 @@ func handleMsgMhfTransitMessage(s *Session, p mhfpacket.MHFPacket) {
case 3: // Unknown case 3: // Unknown
values := bf.ReadUint8() values := bf.ReadUint8()
for i := uint8(0); i < values; i++ { for i := uint8(0); i < values; i++ {
if _config.ErupeConfig.RealClientMode >= _config.Z1 { if _config.ErupeConfig.ClientID >= _config.Z1 {
findPartyParams.Unk0 = append(findPartyParams.Unk0, bf.ReadInt16()) findPartyParams.Unk0 = append(findPartyParams.Unk0, bf.ReadInt16())
} else { } else {
findPartyParams.Unk0 = append(findPartyParams.Unk0, int16(bf.ReadInt8())) findPartyParams.Unk0 = append(findPartyParams.Unk0, int16(bf.ReadInt8()))
@@ -508,7 +508,7 @@ func handleMsgMhfTransitMessage(s *Session, p mhfpacket.MHFPacket) {
case 4: // Looking for n or already have n case 4: // Looking for n or already have n
values := bf.ReadUint8() values := bf.ReadUint8()
for i := uint8(0); i < values; i++ { for i := uint8(0); i < values; i++ {
if _config.ErupeConfig.RealClientMode >= _config.Z1 { if _config.ErupeConfig.ClientID >= _config.Z1 {
findPartyParams.Unk1 = append(findPartyParams.Unk1, bf.ReadInt16()) findPartyParams.Unk1 = append(findPartyParams.Unk1, bf.ReadInt16())
} else { } else {
findPartyParams.Unk1 = append(findPartyParams.Unk1, int16(bf.ReadInt8())) findPartyParams.Unk1 = append(findPartyParams.Unk1, int16(bf.ReadInt8()))
@@ -517,7 +517,7 @@ func handleMsgMhfTransitMessage(s *Session, p mhfpacket.MHFPacket) {
case 5: case 5:
values := bf.ReadUint8() values := bf.ReadUint8()
for i := uint8(0); i < values; i++ { for i := uint8(0); i < values; i++ {
if _config.ErupeConfig.RealClientMode >= _config.Z1 { if _config.ErupeConfig.ClientID >= _config.Z1 {
findPartyParams.QuestID = append(findPartyParams.QuestID, bf.ReadInt16()) findPartyParams.QuestID = append(findPartyParams.QuestID, bf.ReadInt16())
} else { } else {
findPartyParams.QuestID = append(findPartyParams.QuestID, int16(bf.ReadInt8())) findPartyParams.QuestID = append(findPartyParams.QuestID, int16(bf.ReadInt8()))
@@ -535,15 +535,15 @@ func handleMsgMhfTransitMessage(s *Session, p mhfpacket.MHFPacket) {
sb3.Seek(4, 0) sb3.Seek(4, 0)
stageDataParams := 7 stageDataParams := 7
if _config.ErupeConfig.RealClientMode <= _config.G10 { if _config.ErupeConfig.ClientID <= _config.G10 {
stageDataParams = 4 stageDataParams = 4
} else if _config.ErupeConfig.RealClientMode <= _config.Z1 { } else if _config.ErupeConfig.ClientID <= _config.Z1 {
stageDataParams = 6 stageDataParams = 6
} }
var stageData []int16 var stageData []int16
for i := 0; i < stageDataParams; i++ { for i := 0; i < stageDataParams; i++ {
if _config.ErupeConfig.RealClientMode >= _config.Z1 { if _config.ErupeConfig.ClientID >= _config.Z1 {
stageData = append(stageData, sb3.ReadInt16()) stageData = append(stageData, sb3.ReadInt16())
} else { } else {
stageData = append(stageData, int16(sb3.ReadInt8())) stageData = append(stageData, int16(sb3.ReadInt8()))
@@ -592,7 +592,7 @@ func handleMsgMhfTransitMessage(s *Session, p mhfpacket.MHFPacket) {
resp.WriteUint8(uint8(len(stage.rawBinaryData[stageBinaryKey{1, 1}]))) resp.WriteUint8(uint8(len(stage.rawBinaryData[stageBinaryKey{1, 1}])))
for i := range stageData { for i := range stageData {
if _config.ErupeConfig.RealClientMode >= _config.Z1 { if _config.ErupeConfig.ClientID >= _config.Z1 {
resp.WriteInt16(stageData[i]) resp.WriteInt16(stageData[i])
} else { } else {
resp.WriteInt8(int8(stageData[i])) resp.WriteInt8(int8(stageData[i]))
@@ -1065,7 +1065,7 @@ func handleMsgMhfStampcardStamp(s *Session, p mhfpacket.MHFPacket) {
{300, 5392, 1, 5392, 3}, {300, 5392, 1, 5392, 3},
{999, 5392, 1, 5392, 4}, {999, 5392, 1, 5392, 4},
} }
if _config.ErupeConfig.RealClientMode <= _config.Z1 { if _config.ErupeConfig.ClientID <= _config.Z1 {
for _, reward := range rewards { for _, reward := range rewards {
if pkt.HR >= reward.HR { if pkt.HR >= reward.HR {
pkt.Item1 = reward.Item1 pkt.Item1 = reward.Item1
@@ -1078,7 +1078,7 @@ func handleMsgMhfStampcardStamp(s *Session, p mhfpacket.MHFPacket) {
bf := byteframe.NewByteFrame() bf := byteframe.NewByteFrame()
bf.WriteUint16(pkt.HR) bf.WriteUint16(pkt.HR)
if _config.ErupeConfig.RealClientMode >= _config.G1 { if _config.ErupeConfig.ClientID >= _config.G1 {
bf.WriteUint16(pkt.GR) bf.WriteUint16(pkt.GR)
} }
var stamps, rewardTier, rewardUnk uint16 var stamps, rewardTier, rewardUnk uint16
@@ -1123,7 +1123,7 @@ func handleMsgMhfGetEarthStatus(s *Session, p mhfpacket.MHFPacket) {
bf.WriteInt32(s.server.erupeConfig.EarthStatus) bf.WriteInt32(s.server.erupeConfig.EarthStatus)
bf.WriteInt32(s.server.erupeConfig.EarthID) bf.WriteInt32(s.server.erupeConfig.EarthID)
for i, m := range s.server.erupeConfig.EarthMonsters { for i, m := range s.server.erupeConfig.EarthMonsters {
if _config.ErupeConfig.RealClientMode <= _config.G9 { if _config.ErupeConfig.ClientID <= _config.G9 {
if i == 3 { if i == 3 {
break break
} }
@@ -1345,10 +1345,10 @@ func handleMsgMhfSetDailyMissionPersonal(s *Session, p mhfpacket.MHFPacket) {}
func equipSkinHistSize() int { func equipSkinHistSize() int {
size := 3200 size := 3200
if _config.ErupeConfig.RealClientMode <= _config.Z2 { if _config.ErupeConfig.ClientID <= _config.Z2 {
size = 2560 size = 2560
} }
if _config.ErupeConfig.RealClientMode <= _config.Z1 { if _config.ErupeConfig.ClientID <= _config.Z1 {
size = 1280 size = 1280
} }
return size return size

View File

@@ -97,7 +97,7 @@ func handleMsgMhfGetCafeDuration(s *Session, p mhfpacket.MHFPacket) {
cafeTime = uint32(gametime.TimeAdjusted().Unix()) - uint32(s.sessionStart) + cafeTime cafeTime = uint32(gametime.TimeAdjusted().Unix()) - uint32(s.sessionStart) + cafeTime
} }
bf.WriteUint32(cafeTime) bf.WriteUint32(cafeTime)
if _config.ErupeConfig.RealClientMode >= _config.ZZ { if _config.ErupeConfig.ClientID >= _config.ZZ {
bf.WriteUint16(0) bf.WriteUint16(0)
ps.Uint16(bf, fmt.Sprintf(s.server.i18n.cafe.reset, int(cafeReset.Month()), cafeReset.Day()), true) ps.Uint16(bf, fmt.Sprintf(s.server.i18n.cafe.reset, int(cafeReset.Month()), cafeReset.Day()), true)
} }

View File

@@ -68,7 +68,7 @@ func handleMsgMhfEnumerateCampaign(s *Session, p mhfpacket.MHFPacket) {
bf.WriteInt16(event.MaxHR) bf.WriteInt16(event.MaxHR)
bf.WriteInt16(event.MinSR) bf.WriteInt16(event.MinSR)
bf.WriteInt16(event.MaxSR) bf.WriteInt16(event.MaxSR)
if _config.ErupeConfig.RealClientMode >= _config.G3 { if _config.ErupeConfig.ClientID >= _config.G3 {
bf.WriteInt16(event.MinGR) bf.WriteInt16(event.MinGR)
bf.WriteInt16(event.MaxGR) bf.WriteInt16(event.MaxGR)
} }

View File

@@ -240,7 +240,7 @@ func parseChatCommand(s *Session, command string) {
} }
case commands["KeyQuest"].Prefix: case commands["KeyQuest"].Prefix:
if commands["KeyQuest"].Enabled || s.isOp() { if commands["KeyQuest"].Enabled || s.isOp() {
if s.server.erupeConfig.RealClientMode < _config.G10 { if s.server.erupeConfig.ClientID < _config.G10 {
sendServerChatMessage(s, s.server.i18n.commands.kqf.version) sendServerChatMessage(s, s.server.i18n.commands.kqf.version)
} else { } else {
if len(args) > 1 { if len(args) > 1 {
@@ -336,7 +336,7 @@ func parseChatCommand(s *Session, command string) {
case "cm", "check", "checkmultiplier", "multiplier": case "cm", "check", "checkmultiplier", "multiplier":
sendServerChatMessage(s, fmt.Sprintf(s.server.i18n.commands.ravi.multiplier, s.server.GetRaviMultiplier())) sendServerChatMessage(s, fmt.Sprintf(s.server.i18n.commands.ravi.multiplier, s.server.GetRaviMultiplier()))
case "sr", "sendres", "resurrection", "ss", "sendsed", "rs", "reqsed": case "sr", "sendres", "resurrection", "ss", "sendsed", "rs", "reqsed":
if s.server.erupeConfig.RealClientMode == _config.ZZ { if s.server.erupeConfig.ClientID == _config.ZZ {
switch args[1] { switch args[1] {
case "sr", "sendres", "resurrection": case "sr", "sendres", "resurrection":
if s.server.raviente.state[28] > 0 { if s.server.raviente.state[28] > 0 {

View File

@@ -58,7 +58,7 @@ type CharacterSaveData struct {
func getPointers() map[SavePointer]int { func getPointers() map[SavePointer]int {
pointers := map[SavePointer]int{pGender: 81, lBookshelfData: 5576} pointers := map[SavePointer]int{pGender: 81, lBookshelfData: 5576}
switch _config.ErupeConfig.RealClientMode { switch _config.ErupeConfig.ClientID {
case _config.ZZ: case _config.ZZ:
pointers[pWeaponID] = 128522 pointers[pWeaponID] = 128522
pointers[pWeaponType] = 128789 pointers[pWeaponType] = 128789
@@ -110,9 +110,9 @@ func getPointers() map[SavePointer]int {
pointers[pGardenData] = 26424 pointers[pGardenData] = 26424
pointers[pRP] = 26614 pointers[pRP] = 26614
} }
if _config.ErupeConfig.RealClientMode == _config.G5 { if _config.ErupeConfig.ClientID == _config.G5 {
pointers[lBookshelfData] = 5548 pointers[lBookshelfData] = 5548
} else if _config.ErupeConfig.RealClientMode <= _config.GG { } else if _config.ErupeConfig.ClientID <= _config.GG {
pointers[lBookshelfData] = 4520 pointers[lBookshelfData] = 4520
} }
return pointers return pointers
@@ -164,7 +164,7 @@ func (save *CharacterSaveData) Save(s *Session) {
save.updateSaveDataWithStruct() save.updateSaveDataWithStruct()
if _config.ErupeConfig.RealClientMode >= _config.G1 { if _config.ErupeConfig.ClientID >= _config.G1 {
err := save.Compress() err := save.Compress()
if err != nil { if err != nil {
s.logger.Error("Failed to compress savedata", zap.Error(err)) s.logger.Error("Failed to compress savedata", zap.Error(err))
@@ -207,10 +207,10 @@ func (save *CharacterSaveData) Decompress() error {
func (save *CharacterSaveData) updateSaveDataWithStruct() { func (save *CharacterSaveData) updateSaveDataWithStruct() {
rpBytes := make([]byte, 2) rpBytes := make([]byte, 2)
binary.LittleEndian.PutUint16(rpBytes, save.RP) binary.LittleEndian.PutUint16(rpBytes, save.RP)
if _config.ErupeConfig.RealClientMode >= _config.F4 { if _config.ErupeConfig.ClientID >= _config.F4 {
copy(save.decompSave[save.Pointers[pRP]:save.Pointers[pRP]+2], rpBytes) copy(save.decompSave[save.Pointers[pRP]:save.Pointers[pRP]+2], rpBytes)
} }
if _config.ErupeConfig.RealClientMode >= _config.G10 { if _config.ErupeConfig.ClientID >= _config.G10 {
copy(save.decompSave[save.Pointers[pKQF]:save.Pointers[pKQF]+8], save.KQF) copy(save.decompSave[save.Pointers[pKQF]:save.Pointers[pKQF]+8], save.KQF)
} }
} }
@@ -224,7 +224,7 @@ func (save *CharacterSaveData) updateStructWithSaveData() {
save.Gender = false save.Gender = false
} }
if !save.IsNewCharacter { if !save.IsNewCharacter {
if _config.ErupeConfig.RealClientMode >= _config.S6 { if _config.ErupeConfig.ClientID >= _config.S6 {
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]
@@ -235,12 +235,12 @@ func (save *CharacterSaveData) updateStructWithSaveData() {
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.HR = binary.LittleEndian.Uint16(save.decompSave[save.Pointers[pHR] : save.Pointers[pHR]+2]) save.HR = binary.LittleEndian.Uint16(save.decompSave[save.Pointers[pHR] : save.Pointers[pHR]+2])
if _config.ErupeConfig.RealClientMode >= _config.G1 { if _config.ErupeConfig.ClientID >= _config.G1 {
if save.HR == uint16(999) { if save.HR == uint16(999) {
save.GR = grpToGR(int(binary.LittleEndian.Uint32(save.decompSave[save.Pointers[pGRP] : save.Pointers[pGRP]+4]))) save.GR = grpToGR(int(binary.LittleEndian.Uint32(save.decompSave[save.Pointers[pGRP] : save.Pointers[pGRP]+4])))
} }
} }
if _config.ErupeConfig.RealClientMode >= _config.G10 { if _config.ErupeConfig.ClientID >= _config.G10 {
save.KQF = save.decompSave[save.Pointers[pKQF] : save.Pointers[pKQF]+8] save.KQF = save.decompSave[save.Pointers[pKQF] : save.Pointers[pKQF]+8]
} }
} }

View File

@@ -61,7 +61,7 @@ func handleMsgMhfSavedata(s *Session, p mhfpacket.MHFPacket) {
s.Name = characterSaveData.Name s.Name = characterSaveData.Name
} }
if characterSaveData.Name == s.Name || _config.ErupeConfig.RealClientMode <= _config.S10 { if characterSaveData.Name == s.Name || _config.ErupeConfig.ClientID <= _config.S10 {
characterSaveData.Save(s) characterSaveData.Save(s)
s.logger.Info("Wrote recompressed savedata back to DB.") s.logger.Info("Wrote recompressed savedata back to DB.")
} else { } else {

View File

@@ -64,7 +64,7 @@ func handleMsgMhfEnumerateDistItem(s *Session, p mhfpacket.MHFPacket) {
bf.WriteUint32(dist.Rights) bf.WriteUint32(dist.Rights)
bf.WriteUint16(dist.TimesAcceptable) bf.WriteUint16(dist.TimesAcceptable)
bf.WriteUint16(dist.TimesAccepted) bf.WriteUint16(dist.TimesAccepted)
if _config.ErupeConfig.RealClientMode >= _config.G9 { if _config.ErupeConfig.ClientID >= _config.G9 {
bf.WriteUint16(0) // Unk bf.WriteUint16(0) // Unk
} }
bf.WriteInt16(dist.MinHR) bf.WriteInt16(dist.MinHR)
@@ -73,29 +73,29 @@ func handleMsgMhfEnumerateDistItem(s *Session, p mhfpacket.MHFPacket) {
bf.WriteInt16(dist.MaxSR) bf.WriteInt16(dist.MaxSR)
bf.WriteInt16(dist.MinGR) bf.WriteInt16(dist.MinGR)
bf.WriteInt16(dist.MaxGR) bf.WriteInt16(dist.MaxGR)
if _config.ErupeConfig.RealClientMode >= _config.G7 { if _config.ErupeConfig.ClientID >= _config.G7 {
bf.WriteUint8(0) // Unk bf.WriteUint8(0) // Unk
} }
if _config.ErupeConfig.RealClientMode >= _config.G6 { if _config.ErupeConfig.ClientID >= _config.G6 {
bf.WriteUint16(0) // Unk bf.WriteUint16(0) // Unk
} }
if _config.ErupeConfig.RealClientMode >= _config.G8 { if _config.ErupeConfig.ClientID >= _config.G8 {
if dist.Selection { if dist.Selection {
bf.WriteUint8(2) // Selection bf.WriteUint8(2) // Selection
} else { } else {
bf.WriteUint8(0) bf.WriteUint8(0)
} }
} }
if _config.ErupeConfig.RealClientMode >= _config.G7 { if _config.ErupeConfig.ClientID >= _config.G7 {
bf.WriteUint16(0) // Unk bf.WriteUint16(0) // Unk
bf.WriteUint16(0) // Unk bf.WriteUint16(0) // Unk
} }
if _config.ErupeConfig.RealClientMode >= _config.G10 { if _config.ErupeConfig.ClientID >= _config.G10 {
bf.WriteUint8(0) // Unk bf.WriteUint8(0) // Unk
} }
ps.Uint8(bf, dist.EventName, true) ps.Uint8(bf, dist.EventName, true)
k := 6 k := 6
if _config.ErupeConfig.RealClientMode >= _config.G8 { if _config.ErupeConfig.ClientID >= _config.G8 {
k = 13 k = 13
} }
for i := 0; i < 6; i++ { for i := 0; i < 6; i++ {
@@ -104,7 +104,7 @@ func handleMsgMhfEnumerateDistItem(s *Session, p mhfpacket.MHFPacket) {
bf.WriteUint32(0) bf.WriteUint32(0)
} }
} }
if _config.ErupeConfig.RealClientMode >= _config.Z2 { if _config.ErupeConfig.ClientID >= _config.Z2 {
i := uint8(0) i := uint8(0)
bf.WriteUint8(i) bf.WriteUint8(i)
if i <= 10 { if i <= 10 {
@@ -152,7 +152,7 @@ func handleMsgMhfApplyDistItem(s *Session, p mhfpacket.MHFPacket) {
bf.WriteUint8(item.ItemType) bf.WriteUint8(item.ItemType)
bf.WriteUint32(item.ItemID) bf.WriteUint32(item.ItemID)
bf.WriteUint32(item.Quantity) bf.WriteUint32(item.Quantity)
if _config.ErupeConfig.RealClientMode >= _config.G8 { if _config.ErupeConfig.ClientID >= _config.G8 {
bf.WriteUint32(item.ID) bf.WriteUint32(item.ID)
} }
} }

View File

@@ -73,7 +73,7 @@ func handleMsgMhfGetUdSchedule(s *Session, p mhfpacket.MHFPacket) {
var timestamps []uint32 var timestamps []uint32
if s.server.erupeConfig.DebugOptions.DivaOverride >= 0 { if s.server.erupeConfig.DebugOptions.DivaOverride >= 0 {
if s.server.erupeConfig.DebugOptions.DivaOverride == 0 { if s.server.erupeConfig.DebugOptions.DivaOverride == 0 {
if s.server.erupeConfig.RealClientMode >= _config.Z2 { if s.server.erupeConfig.ClientID >= _config.Z2 {
doAckBufSucceed(s, pkt.AckHandle, make([]byte, 36)) doAckBufSucceed(s, pkt.AckHandle, make([]byte, 36))
} else { } else {
doAckBufSucceed(s, pkt.AckHandle, make([]byte, 32)) doAckBufSucceed(s, pkt.AckHandle, make([]byte, 32))
@@ -85,7 +85,7 @@ func handleMsgMhfGetUdSchedule(s *Session, p mhfpacket.MHFPacket) {
timestamps = generateDivaTimestamps(s, start, false) timestamps = generateDivaTimestamps(s, start, false)
} }
if s.server.erupeConfig.RealClientMode >= _config.Z2 { if s.server.erupeConfig.ClientID >= _config.Z2 {
bf.WriteUint32(id) bf.WriteUint32(id)
} }
for i := range timestamps { for i := range timestamps {

View File

@@ -88,13 +88,13 @@ func handleMsgMhfGetWeeklySchedule(s *Session, p mhfpacket.MHFPacket) {
func generateFeatureWeapons(count int) activeFeature { func generateFeatureWeapons(count int) activeFeature {
_max := 14 _max := 14
if _config.ErupeConfig.RealClientMode < _config.ZZ { if _config.ErupeConfig.ClientID < _config.ZZ {
_max = 13 _max = 13
} }
if _config.ErupeConfig.RealClientMode < _config.G10 { if _config.ErupeConfig.ClientID < _config.G10 {
_max = 12 _max = 12
} }
if _config.ErupeConfig.RealClientMode < _config.GG { if _config.ErupeConfig.ClientID < _config.GG {
_max = 11 _max = 11
} }
if count > _max { if count > _max {

View File

@@ -236,7 +236,7 @@ func handleMsgMhfInfoFesta(s *Session, p mhfpacket.MHFPacket) {
bf.WriteUint16(trial.Locale) bf.WriteUint16(trial.Locale)
bf.WriteUint16(trial.Reward) bf.WriteUint16(trial.Reward)
bf.WriteInt16(FestivalColorCodes[trial.Monopoly]) bf.WriteInt16(FestivalColorCodes[trial.Monopoly])
if _config.ErupeConfig.RealClientMode >= _config.F4 { // Not in S6.0 if _config.ErupeConfig.ClientID >= _config.F4 { // Not in S6.0
bf.WriteUint16(trial.Unk) bf.WriteUint16(trial.Unk)
} }
} }
@@ -279,13 +279,13 @@ func handleMsgMhfInfoFesta(s *Session, p mhfpacket.MHFPacket) {
bf.WriteUint16(reward.Quantity) bf.WriteUint16(reward.Quantity)
bf.WriteUint16(reward.ItemID) bf.WriteUint16(reward.ItemID)
// Not confirmed to be G1 but exists in G3 // Not confirmed to be G1 but exists in G3
if _config.ErupeConfig.RealClientMode >= _config.G1 { if _config.ErupeConfig.ClientID >= _config.G1 {
bf.WriteUint16(reward.Unk5) bf.WriteUint16(reward.Unk5)
bf.WriteUint16(reward.Unk6) bf.WriteUint16(reward.Unk6)
bf.WriteUint8(reward.Unk7) bf.WriteUint8(reward.Unk7)
} }
} }
if _config.ErupeConfig.RealClientMode <= _config.G61 { if _config.ErupeConfig.ClientID <= _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
} }
@@ -348,7 +348,7 @@ func handleMsgMhfInfoFesta(s *Session, p mhfpacket.MHFPacket) {
bf.WriteUint16(100) // Normal rate bf.WriteUint16(100) // Normal rate
bf.WriteUint16(50) // 50% penalty bf.WriteUint16(50) // 50% penalty
if _config.ErupeConfig.RealClientMode >= _config.G52 { if _config.ErupeConfig.ClientID >= _config.G52 {
ps.Uint16(bf, "", false) ps.Uint16(bf, "", false)
} }
doAckBufSucceed(s, pkt.AckHandle, bf.Data()) doAckBufSucceed(s, pkt.AckHandle, bf.Data())
@@ -433,7 +433,7 @@ func handleMsgMhfEnumerateFestaMember(s *Session, p mhfpacket.MHFPacket) {
bf.WriteUint16(0) // Unk bf.WriteUint16(0) // Unk
for _, member := range validMembers { for _, member := range validMembers {
bf.WriteUint32(member.CharID) bf.WriteUint32(member.CharID)
if _config.ErupeConfig.RealClientMode <= _config.Z1 { if _config.ErupeConfig.ClientID <= _config.Z1 {
bf.WriteUint16(uint16(member.Souls)) bf.WriteUint16(uint16(member.Souls))
bf.WriteUint16(0) bf.WriteUint16(0)
} else { } else {

View File

@@ -123,7 +123,7 @@ func (g *Guild) Rank() uint16 {
24, 48, 96, 144, 192, 240, 288, 360, 432, 24, 48, 96, 144, 192, 240, 288, 360, 432,
504, 600, 696, 792, 888, 984, 1080, 1200, 504, 600, 696, 792, 888, 984, 1080, 1200,
} }
if _config.ErupeConfig.RealClientMode <= _config.Z2 { if _config.ErupeConfig.ClientID <= _config.Z2 {
rpMap = []uint32{ rpMap = []uint32{
3500, 6000, 8500, 11000, 13500, 16000, 20000, 24000, 28000, 3500, 6000, 8500, 11000, 13500, 16000, 20000, 24000, 28000,
33000, 38000, 43000, 48000, 55000, 70000, 90000, 120000, 33000, 38000, 43000, 48000, 55000, 70000, 90000, 120000,
@@ -131,21 +131,21 @@ func (g *Guild) Rank() uint16 {
} }
for i, u := range rpMap { for i, u := range rpMap {
if g.RankRP < u { if g.RankRP < u {
if _config.ErupeConfig.RealClientMode <= _config.S6 && i >= 12 { if _config.ErupeConfig.ClientID <= _config.S6 && i >= 12 {
return 12 return 12
} else if _config.ErupeConfig.RealClientMode <= _config.F5 && i >= 13 { } else if _config.ErupeConfig.ClientID <= _config.F5 && i >= 13 {
return 13 return 13
} else if _config.ErupeConfig.RealClientMode <= _config.G32 && i >= 14 { } else if _config.ErupeConfig.ClientID <= _config.G32 && i >= 14 {
return 14 return 14
} }
return uint16(i) return uint16(i)
} }
} }
if _config.ErupeConfig.RealClientMode <= _config.S6 { if _config.ErupeConfig.ClientID <= _config.S6 {
return 12 return 12
} else if _config.ErupeConfig.RealClientMode <= _config.F5 { } else if _config.ErupeConfig.ClientID <= _config.F5 {
return 13 return 13
} else if _config.ErupeConfig.RealClientMode <= _config.G32 { } else if _config.ErupeConfig.ClientID <= _config.G32 {
return 14 return 14
} }
return 17 return 17
@@ -1006,7 +1006,7 @@ func handleMsgMhfInfoGuild(s *Session, p mhfpacket.MHFPacket) {
bf.WriteUint8(guild.PugiOutfit1) bf.WriteUint8(guild.PugiOutfit1)
bf.WriteUint8(guild.PugiOutfit2) bf.WriteUint8(guild.PugiOutfit2)
bf.WriteUint8(guild.PugiOutfit3) bf.WriteUint8(guild.PugiOutfit3)
if s.server.erupeConfig.RealClientMode >= _config.Z1 { if s.server.erupeConfig.ClientID >= _config.Z1 {
bf.WriteUint8(guild.PugiOutfit1) bf.WriteUint8(guild.PugiOutfit1)
bf.WriteUint8(guild.PugiOutfit2) bf.WriteUint8(guild.PugiOutfit2)
bf.WriteUint8(guild.PugiOutfit3) bf.WriteUint8(guild.PugiOutfit3)
@@ -1460,10 +1460,10 @@ func handleMsgMhfEnumerateGuildMember(s *Session, p mhfpacket.MHFPacket) {
for _, member := range guildMembers { for _, member := range guildMembers {
bf.WriteUint32(member.CharID) bf.WriteUint32(member.CharID)
bf.WriteUint16(member.HR) bf.WriteUint16(member.HR)
if s.server.erupeConfig.RealClientMode >= _config.G10 { if s.server.erupeConfig.ClientID >= _config.G10 {
bf.WriteUint16(member.GR) bf.WriteUint16(member.GR)
} }
if s.server.erupeConfig.RealClientMode < _config.ZZ { if s.server.erupeConfig.ClientID < _config.ZZ {
// Magnet Spike crash workaround // Magnet Spike crash workaround
bf.WriteUint16(0) bf.WriteUint16(0)
} else { } else {

View File

@@ -122,7 +122,7 @@ func handleMsgMhfEnumerateHouse(s *Session, p mhfpacket.MHFPacket) {
bf.WriteUint8(0) bf.WriteUint8(0)
} }
bf.WriteUint16(house.HR) bf.WriteUint16(house.HR)
if _config.ErupeConfig.RealClientMode >= _config.G10 { if _config.ErupeConfig.ClientID >= _config.G10 {
bf.WriteUint16(house.GR) bf.WriteUint16(house.GR)
} }
ps.Uint8(bf, house.Name, true) ps.Uint8(bf, house.Name, true)
@@ -258,7 +258,7 @@ func handleMsgMhfLoadDecoMyset(s *Session, p mhfpacket.MHFPacket) {
} }
if len(data) == 0 { if len(data) == 0 {
data = []byte{0x01, 0x00} data = []byte{0x01, 0x00}
if s.server.erupeConfig.RealClientMode < _config.G10 { if s.server.erupeConfig.ClientID < _config.G10 {
data = []byte{0x00, 0x00} data = []byte{0x00, 0x00}
} }
} }
@@ -278,7 +278,7 @@ func handleMsgMhfSaveDecoMyset(s *Session, p mhfpacket.MHFPacket) {
// Version handling // Version handling
bf := byteframe.NewByteFrame() bf := byteframe.NewByteFrame()
var size uint var size uint
if s.server.erupeConfig.RealClientMode >= _config.G10 { if s.server.erupeConfig.ClientID >= _config.G10 {
size = 76 size = 76
bf.WriteUint8(1) bf.WriteUint8(1)
} else { } else {

View File

@@ -57,7 +57,7 @@ func handleMsgMhfLoadLegendDispatch(s *Session, p mhfpacket.MHFPacket) {
func handleMsgMhfLoadHunterNavi(s *Session, p mhfpacket.MHFPacket) { func handleMsgMhfLoadHunterNavi(s *Session, p mhfpacket.MHFPacket) {
pkt := p.(*mhfpacket.MsgMhfLoadHunterNavi) pkt := p.(*mhfpacket.MsgMhfLoadHunterNavi)
naviLength := 552 naviLength := 552
if s.server.erupeConfig.RealClientMode <= _config.G7 { if s.server.erupeConfig.ClientID <= _config.G7 {
naviLength = 280 naviLength = 280
} }
var data []byte var data []byte
@@ -73,7 +73,7 @@ func handleMsgMhfSaveHunterNavi(s *Session, p mhfpacket.MHFPacket) {
pkt := p.(*mhfpacket.MsgMhfSaveHunterNavi) pkt := p.(*mhfpacket.MsgMhfSaveHunterNavi)
if pkt.IsDataDiff { if pkt.IsDataDiff {
naviLength := 552 naviLength := 552
if s.server.erupeConfig.RealClientMode <= _config.G7 { if s.server.erupeConfig.ClientID <= _config.G7 {
naviLength = 280 naviLength = 280
} }
var data []byte var data []byte

View File

@@ -62,16 +62,16 @@ func BackportQuest(data []byte) []byte {
} }
fillLength := uint32(108) fillLength := uint32(108)
if _config.ErupeConfig.RealClientMode <= _config.S6 { if _config.ErupeConfig.ClientID <= _config.S6 {
fillLength = 44 fillLength = 44
} else if _config.ErupeConfig.RealClientMode <= _config.F5 { } else if _config.ErupeConfig.ClientID <= _config.F5 {
fillLength = 52 fillLength = 52
} else if _config.ErupeConfig.RealClientMode <= _config.G101 { } else if _config.ErupeConfig.ClientID <= _config.G101 {
fillLength = 76 fillLength = 76
} }
copy(data[wp:wp+fillLength], data[rp:rp+fillLength]) copy(data[wp:wp+fillLength], data[rp:rp+fillLength])
if _config.ErupeConfig.RealClientMode <= _config.G91 { if _config.ErupeConfig.ClientID <= _config.G91 {
patterns := [][]byte{ patterns := [][]byte{
{0x0A, 0x00, 0x01, 0x33, 0xD7, 0x00}, // 10% Armor Sphere -> Stone {0x0A, 0x00, 0x01, 0x33, 0xD7, 0x00}, // 10% Armor Sphere -> Stone
{0x06, 0x00, 0x02, 0x33, 0xD8, 0x00}, // 6% Armor Sphere+ -> Iron Ore {0x06, 0x00, 0x02, 0x33, 0xD8, 0x00}, // 6% Armor Sphere+ -> Iron Ore
@@ -132,7 +132,7 @@ func handleMsgSysGetFile(s *Session, p mhfpacket.MHFPacket) {
doAckBufSucceed(s, pkt.AckHandle, data) doAckBufSucceed(s, pkt.AckHandle, data)
return return
} }
if _config.ErupeConfig.RealClientMode <= _config.Z1 && s.server.erupeConfig.DebugOptions.AutoQuestBackport { if _config.ErupeConfig.ClientID <= _config.Z1 && s.server.erupeConfig.DebugOptions.AutoQuestBackport {
data = BackportQuest(decryption.UnpackSimple(data)) data = BackportQuest(decryption.UnpackSimple(data))
} }
doAckBufSucceed(s, pkt.AckHandle, data) doAckBufSucceed(s, pkt.AckHandle, data)
@@ -196,7 +196,7 @@ func loadQuestFile(s *Session, questId int) []byte {
} }
decrypted := decryption.UnpackSimple(file) decrypted := decryption.UnpackSimple(file)
if _config.ErupeConfig.RealClientMode <= _config.Z1 && s.server.erupeConfig.DebugOptions.AutoQuestBackport { if _config.ErupeConfig.ClientID <= _config.Z1 && s.server.erupeConfig.DebugOptions.AutoQuestBackport {
decrypted = BackportQuest(decrypted) decrypted = BackportQuest(decrypted)
} }
fileBytes := byteframe.NewByteFrameFromBytes(decrypted) fileBytes := byteframe.NewByteFrameFromBytes(decrypted)
@@ -204,13 +204,13 @@ func loadQuestFile(s *Session, questId int) []byte {
fileBytes.Seek(int64(fileBytes.ReadUint32()), 0) fileBytes.Seek(int64(fileBytes.ReadUint32()), 0)
bodyLength := 320 bodyLength := 320
if _config.ErupeConfig.RealClientMode <= _config.S6 { if _config.ErupeConfig.ClientID <= _config.S6 {
bodyLength = 160 bodyLength = 160
} else if _config.ErupeConfig.RealClientMode <= _config.F5 { } else if _config.ErupeConfig.ClientID <= _config.F5 {
bodyLength = 168 bodyLength = 168
} else if _config.ErupeConfig.RealClientMode <= _config.G101 { } else if _config.ErupeConfig.ClientID <= _config.G101 {
bodyLength = 192 bodyLength = 192
} else if _config.ErupeConfig.RealClientMode <= _config.Z1 { } else if _config.ErupeConfig.ClientID <= _config.Z1 {
bodyLength = 224 bodyLength = 224
} }
@@ -282,7 +282,7 @@ func makeEventQuest(s *Session, rows *sql.Rows) ([]byte, error) {
bf.WriteBool(true) bf.WriteBool(true)
} }
bf.WriteUint16(0) // Unk bf.WriteUint16(0) // Unk
if _config.ErupeConfig.RealClientMode >= _config.G2 { if _config.ErupeConfig.ClientID >= _config.G2 {
bf.WriteUint32(mark) bf.WriteUint32(mark)
} }
bf.WriteUint16(0) // Unk bf.WriteUint16(0) // Unk
@@ -580,23 +580,23 @@ func handleMsgMhfEnumerateQuest(s *Session, p mhfpacket.MHFPacket) {
tuneValues = temp tuneValues = temp
tuneLimit := 770 tuneLimit := 770
if _config.ErupeConfig.RealClientMode <= _config.G1 { if _config.ErupeConfig.ClientID <= _config.G1 {
tuneLimit = 256 tuneLimit = 256
} else if _config.ErupeConfig.RealClientMode <= _config.G3 { } else if _config.ErupeConfig.ClientID <= _config.G3 {
tuneLimit = 283 tuneLimit = 283
} else if _config.ErupeConfig.RealClientMode <= _config.GG { } else if _config.ErupeConfig.ClientID <= _config.GG {
tuneLimit = 315 tuneLimit = 315
} else if _config.ErupeConfig.RealClientMode <= _config.G61 { } else if _config.ErupeConfig.ClientID <= _config.G61 {
tuneLimit = 332 tuneLimit = 332
} else if _config.ErupeConfig.RealClientMode <= _config.G7 { } else if _config.ErupeConfig.ClientID <= _config.G7 {
tuneLimit = 339 tuneLimit = 339
} else if _config.ErupeConfig.RealClientMode <= _config.G81 { } else if _config.ErupeConfig.ClientID <= _config.G81 {
tuneLimit = 396 tuneLimit = 396
} else if _config.ErupeConfig.RealClientMode <= _config.G91 { } else if _config.ErupeConfig.ClientID <= _config.G91 {
tuneLimit = 694 tuneLimit = 694
} else if _config.ErupeConfig.RealClientMode <= _config.G101 { } else if _config.ErupeConfig.ClientID <= _config.G101 {
tuneLimit = 704 tuneLimit = 704
} else if _config.ErupeConfig.RealClientMode <= _config.Z2 { } else if _config.ErupeConfig.ClientID <= _config.Z2 {
tuneLimit = 750 tuneLimit = 750
} }
if len(tuneValues) > tuneLimit { if len(tuneValues) > tuneLimit {

View File

@@ -62,7 +62,7 @@ func writeShopItems(bf *byteframe.ByteFrame, items []ShopItem) {
bf.WriteUint16(uint16(len(items))) bf.WriteUint16(uint16(len(items)))
bf.WriteUint16(uint16(len(items))) bf.WriteUint16(uint16(len(items)))
for _, item := range items { for _, item := range items {
if _config.ErupeConfig.RealClientMode >= _config.Z2 { if _config.ErupeConfig.ClientID >= _config.Z2 {
bf.WriteUint32(item.ID) bf.WriteUint32(item.ID)
} }
bf.WriteUint32(item.ItemID) bf.WriteUint32(item.ItemID)
@@ -70,19 +70,19 @@ func writeShopItems(bf *byteframe.ByteFrame, items []ShopItem) {
bf.WriteUint16(item.Quantity) bf.WriteUint16(item.Quantity)
bf.WriteUint16(item.MinHR) bf.WriteUint16(item.MinHR)
bf.WriteUint16(item.MinSR) bf.WriteUint16(item.MinSR)
if _config.ErupeConfig.RealClientMode >= _config.Z2 { if _config.ErupeConfig.ClientID >= _config.Z2 {
bf.WriteUint16(item.MinGR) bf.WriteUint16(item.MinGR)
} }
bf.WriteUint8(0) // Unk bf.WriteUint8(0) // Unk
bf.WriteUint8(item.StoreLevel) bf.WriteUint8(item.StoreLevel)
if _config.ErupeConfig.RealClientMode >= _config.Z2 { if _config.ErupeConfig.ClientID >= _config.Z2 {
bf.WriteUint16(item.MaxQuantity) bf.WriteUint16(item.MaxQuantity)
bf.WriteUint16(item.UsedQuantity) bf.WriteUint16(item.UsedQuantity)
} }
if _config.ErupeConfig.RealClientMode == _config.Z1 { if _config.ErupeConfig.ClientID == _config.Z1 {
bf.WriteUint8(uint8(item.RoadFloors)) bf.WriteUint8(uint8(item.RoadFloors))
bf.WriteUint8(uint8(item.RoadFatalis)) bf.WriteUint8(uint8(item.RoadFatalis))
} else if _config.ErupeConfig.RealClientMode >= _config.Z2 { } else if _config.ErupeConfig.ClientID >= _config.Z2 {
bf.WriteUint16(item.RoadFloors) bf.WriteUint16(item.RoadFloors)
bf.WriteUint16(item.RoadFatalis) bf.WriteUint16(item.RoadFatalis)
} }
@@ -123,7 +123,7 @@ func handleMsgMhfEnumerateShop(s *Session, p mhfpacket.MHFPacket) {
switch pkt.ShopType { switch pkt.ShopType {
case 1: // Running gachas case 1: // Running gachas
// Fundamentally, gacha works completely differently, just hide it for now. // Fundamentally, gacha works completely differently, just hide it for now.
if _config.ErupeConfig.RealClientMode <= _config.G7 { if _config.ErupeConfig.ClientID <= _config.G7 {
doAckBufSucceed(s, pkt.AckHandle, make([]byte, 4)) doAckBufSucceed(s, pkt.AckHandle, make([]byte, 4))
return return
} }
@@ -156,7 +156,7 @@ func handleMsgMhfEnumerateShop(s *Session, p mhfpacket.MHFPacket) {
ps.Uint8(bf, g.Name, true) ps.Uint8(bf, g.Name, true)
ps.Uint8(bf, g.URLBanner, false) ps.Uint8(bf, g.URLBanner, false)
ps.Uint8(bf, g.URLFeature, false) ps.Uint8(bf, g.URLFeature, false)
if _config.ErupeConfig.RealClientMode >= _config.G10 { if _config.ErupeConfig.ClientID >= _config.G10 {
bf.WriteBool(g.Wide) bf.WriteBool(g.Wide)
ps.Uint8(bf, g.URLThumbnail, false) ps.Uint8(bf, g.URLThumbnail, false)
} }
@@ -166,7 +166,7 @@ func handleMsgMhfEnumerateShop(s *Session, p mhfpacket.MHFPacket) {
bf.WriteUint16(0) bf.WriteUint16(0)
} }
bf.WriteUint8(g.GachaType) bf.WriteUint8(g.GachaType)
if _config.ErupeConfig.RealClientMode >= _config.G10 { if _config.ErupeConfig.ClientID >= _config.G10 {
bf.WriteBool(g.Hidden) bf.WriteBool(g.Hidden)
} }
} }
@@ -708,7 +708,7 @@ func handleMsgMhfGetFpointExchangeList(s *Session, p mhfpacket.MHFPacket) {
exchanges = append(exchanges, exchange) exchanges = append(exchanges, exchange)
} }
} }
if _config.ErupeConfig.RealClientMode <= _config.Z2 { if _config.ErupeConfig.ClientID <= _config.Z2 {
bf.WriteUint8(uint8(len(exchanges))) bf.WriteUint8(uint8(len(exchanges)))
bf.WriteUint8(uint8(buyables)) bf.WriteUint8(uint8(buyables))
} else { } else {

View File

@@ -67,7 +67,7 @@ func handleMsgMhfGetTowerInfo(s *Session, p mhfpacket.MHFPacket) {
s.server.db.Exec(`INSERT INTO tower (char_id) VALUES ($1)`, s.charID) s.server.db.Exec(`INSERT INTO tower (char_id) VALUES ($1)`, s.charID)
} }
if _config.ErupeConfig.RealClientMode <= _config.G7 { if _config.ErupeConfig.ClientID <= _config.G7 {
towerInfo.Level = towerInfo.Level[:1] towerInfo.Level = towerInfo.Level[:1]
} }

View File

@@ -18,12 +18,12 @@ func encodeServerInfo(config *_config.Config, s *Server, local bool) []byte {
for serverIdx, si := range serverInfos { for serverIdx, si := range serverInfos {
// Prevent MezFes Worlds displaying on Z1 // Prevent MezFes Worlds displaying on Z1
if config.RealClientMode <= _config.Z1 { if config.ClientID <= _config.Z1 {
if si.Type == 6 { if si.Type == 6 {
continue continue
} }
} }
if config.RealClientMode <= _config.G6 { if config.ClientID <= _config.G6 {
if si.Type == 5 { if si.Type == 5 {
continue continue
} }
@@ -42,22 +42,22 @@ func encodeServerInfo(config *_config.Config, s *Server, local bool) []byte {
bf.WriteUint16(uint16(len(si.Channels))) bf.WriteUint16(uint16(len(si.Channels)))
bf.WriteUint8(si.Type) bf.WriteUint8(si.Type)
bf.WriteUint8(uint8(((gametime.TimeAdjusted().Unix() / 86400) + int64(serverIdx)) % 3)) bf.WriteUint8(uint8(((gametime.TimeAdjusted().Unix() / 86400) + int64(serverIdx)) % 3))
if s.erupeConfig.RealClientMode >= _config.G1 { if s.erupeConfig.ClientID >= _config.G1 {
bf.WriteUint8(si.Recommended) bf.WriteUint8(si.Recommended)
} }
fullName := append(append(stringsupport.UTF8ToSJIS(si.Name), []byte{0x00}...), stringsupport.UTF8ToSJIS(si.Description)...) fullName := append(append(stringsupport.UTF8ToSJIS(si.Name), []byte{0x00}...), stringsupport.UTF8ToSJIS(si.Description)...)
if s.erupeConfig.RealClientMode >= _config.G1 && s.erupeConfig.RealClientMode <= _config.G5 { if s.erupeConfig.ClientID >= _config.G1 && s.erupeConfig.ClientID <= _config.G5 {
bf.WriteUint8(uint8(len(fullName))) bf.WriteUint8(uint8(len(fullName)))
bf.WriteBytes(fullName) bf.WriteBytes(fullName)
} else { } else {
if s.erupeConfig.RealClientMode >= _config.G51 { if s.erupeConfig.ClientID >= _config.G51 {
bf.WriteUint8(0) // Ignored bf.WriteUint8(0) // Ignored
} }
bf.WriteBytes(stringsupport.PaddedString(string(fullName), 65, false)) bf.WriteBytes(stringsupport.PaddedString(string(fullName), 65, false))
} }
if s.erupeConfig.RealClientMode >= _config.GG { if s.erupeConfig.ClientID >= _config.GG {
bf.WriteUint32(si.AllowedClientFlags) bf.WriteUint32(si.AllowedClientFlags)
} }
@@ -112,7 +112,7 @@ func makeSv2Resp(config *_config.Config, s *Server, local bool) []byte {
serverInfos := config.Entrance.Entries serverInfos := config.Entrance.Entries
// Decrease by the number of MezFes Worlds // Decrease by the number of MezFes Worlds
var mf int var mf int
if config.RealClientMode <= _config.Z1 { if config.ClientID <= _config.Z1 {
for _, si := range serverInfos { for _, si := range serverInfos {
if si.Type == 6 { if si.Type == 6 {
mf++ mf++
@@ -121,7 +121,7 @@ func makeSv2Resp(config *_config.Config, s *Server, local bool) []byte {
} }
// and Return Worlds // and Return Worlds
var ret int var ret int
if config.RealClientMode <= _config.G6 { if config.ClientID <= _config.G6 {
for _, si := range serverInfos { for _, si := range serverInfos {
if si.Type == 5 { if si.Type == 5 {
ret++ ret++
@@ -135,7 +135,7 @@ func makeSv2Resp(config *_config.Config, s *Server, local bool) []byte {
} }
respType := "SV2" respType := "SV2"
if config.RealClientMode <= _config.G32 { if config.ClientID <= _config.G32 {
respType = "SVR" respType = "SVR"
} }

View File

@@ -84,7 +84,7 @@ func (s *Session) makeSignResponse(uid uint32) []byte {
bf.WriteBool(true) // Use uint16 GR, no reason not to bf.WriteBool(true) // Use uint16 GR, no reason not to
bf.WriteBytes(stringsupport.PaddedString(char.Name, 16, true)) // Character name bf.WriteBytes(stringsupport.PaddedString(char.Name, 16, true)) // Character name
bf.WriteBytes(stringsupport.PaddedString(char.UnkDescString, 32, false)) // unk str bf.WriteBytes(stringsupport.PaddedString(char.UnkDescString, 32, false)) // unk str
if s.server.erupeConfig.RealClientMode >= _config.G7 { if s.server.erupeConfig.ClientID >= _config.G7 {
bf.WriteUint16(char.GR) bf.WriteUint16(char.GR)
bf.WriteUint8(0) // Unk bf.WriteUint8(0) // Unk
bf.WriteUint8(0) // Unk bf.WriteUint8(0) // Unk

View File

@@ -114,7 +114,7 @@ func ReadWarehouseEquipment(bf *byteframe.ByteFrame) MHFEquipment {
for i := 0; i < 3; i++ { for i := 0; i < 3; i++ {
equipment.Decorations[i].ItemID = bf.ReadUint16() equipment.Decorations[i].ItemID = bf.ReadUint16()
} }
if _config.ErupeConfig.RealClientMode >= _config.G1 { if _config.ErupeConfig.ClientID >= _config.G1 {
for i := 0; i < 3; i++ { for i := 0; i < 3; i++ {
for j := 0; j < 3; j++ { for j := 0; j < 3; j++ {
equipment.Sigils[i].Effects[j].ID = bf.ReadUint16() equipment.Sigils[i].Effects[j].ID = bf.ReadUint16()
@@ -128,7 +128,7 @@ func ReadWarehouseEquipment(bf *byteframe.ByteFrame) MHFEquipment {
equipment.Sigils[i].Unk3 = bf.ReadUint8() equipment.Sigils[i].Unk3 = bf.ReadUint8()
} }
} }
if _config.ErupeConfig.RealClientMode >= _config.Z1 { if _config.ErupeConfig.ClientID >= _config.Z1 {
equipment.Unk1 = bf.ReadUint16() equipment.Unk1 = bf.ReadUint16()
} }
return equipment return equipment
@@ -144,7 +144,7 @@ func (e MHFEquipment) ToBytes() []byte {
for i := 0; i < 3; i++ { for i := 0; i < 3; i++ {
bf.WriteUint16(e.Decorations[i].ItemID) bf.WriteUint16(e.Decorations[i].ItemID)
} }
if _config.ErupeConfig.RealClientMode >= _config.G1 { if _config.ErupeConfig.ClientID >= _config.G1 {
for i := 0; i < 3; i++ { for i := 0; i < 3; i++ {
for j := 0; j < 3; j++ { for j := 0; j < 3; j++ {
bf.WriteUint16(e.Sigils[i].Effects[j].ID) bf.WriteUint16(e.Sigils[i].Effects[j].ID)
@@ -158,7 +158,7 @@ func (e MHFEquipment) ToBytes() []byte {
bf.WriteUint8(e.Sigils[i].Unk3) bf.WriteUint8(e.Sigils[i].Unk3)
} }
} }
if _config.ErupeConfig.RealClientMode >= _config.Z1 { if _config.ErupeConfig.ClientID >= _config.Z1 {
bf.WriteUint16(e.Unk1) bf.WriteUint16(e.Unk1)
} }
return bf.Data() return bf.Data()