mirror of
https://github.com/Mezeporta/Erupe.git
synced 2025-12-14 07:55:33 +01:00
Merge branch 'main' into feature/quest-enum
# Conflicts: # server/channelserver/handlers_quest.go
This commit is contained in:
@@ -32,6 +32,7 @@ type MsgMhfEnumerateGuild struct {
|
||||
AckHandle uint32
|
||||
Type EnumerateGuildType
|
||||
Page uint8
|
||||
Sorting bool
|
||||
RawDataPayload []byte
|
||||
}
|
||||
|
||||
@@ -45,6 +46,8 @@ func (m *MsgMhfEnumerateGuild) Parse(bf *byteframe.ByteFrame, ctx *clientctx.Cli
|
||||
m.AckHandle = bf.ReadUint32()
|
||||
m.Type = EnumerateGuildType(bf.ReadUint8())
|
||||
m.Page = bf.ReadUint8()
|
||||
m.Sorting = bf.ReadBool()
|
||||
_ = bf.ReadUint8()
|
||||
m.RawDataPayload = bf.DataFromCurrent()
|
||||
bf.Seek(-2, io.SeekEnd)
|
||||
return nil
|
||||
|
||||
@@ -29,8 +29,10 @@ func (m *MsgMhfEnumerateHouse) Parse(bf *byteframe.ByteFrame, ctx *clientctx.Cli
|
||||
m.CharID = bf.ReadUint32()
|
||||
m.Method = bf.ReadUint8()
|
||||
m.Unk = bf.ReadUint16()
|
||||
_ = bf.ReadUint8() // len
|
||||
m.Name = stringsupport.SJISToUTF8(bf.ReadNullTerminatedBytes())
|
||||
lenName := bf.ReadUint8()
|
||||
if lenName > 0 {
|
||||
m.Name = stringsupport.SJISToUTF8(bf.ReadNullTerminatedBytes())
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
|
||||
@@ -1,15 +1,19 @@
|
||||
package mhfpacket
|
||||
|
||||
import (
|
||||
"errors"
|
||||
import (
|
||||
"errors"
|
||||
|
||||
"erupe-ce/network/clientctx"
|
||||
"erupe-ce/network"
|
||||
"erupe-ce/common/byteframe"
|
||||
"erupe-ce/network"
|
||||
"erupe-ce/network/clientctx"
|
||||
)
|
||||
|
||||
// MsgMhfGetGemInfo represents the MSG_MHF_GET_GEM_INFO
|
||||
type MsgMhfGetGemInfo struct{}
|
||||
type MsgMhfGetGemInfo struct {
|
||||
AckHandle uint32
|
||||
Unk uint32
|
||||
Unk1 []byte
|
||||
}
|
||||
|
||||
// Opcode returns the ID associated with this packet type.
|
||||
func (m *MsgMhfGetGemInfo) Opcode() network.PacketID {
|
||||
@@ -18,7 +22,10 @@ func (m *MsgMhfGetGemInfo) Opcode() network.PacketID {
|
||||
|
||||
// Parse parses the packet from binary
|
||||
func (m *MsgMhfGetGemInfo) Parse(bf *byteframe.ByteFrame, ctx *clientctx.ClientContext) error {
|
||||
return errors.New("NOT IMPLEMENTED")
|
||||
m.AckHandle = bf.ReadUint32()
|
||||
m.Unk = bf.ReadUint32()
|
||||
m.Unk1 = bf.ReadBytes(24)
|
||||
return nil
|
||||
}
|
||||
|
||||
// Build builds a binary packet from the current data.
|
||||
|
||||
@@ -1,11 +1,11 @@
|
||||
package mhfpacket
|
||||
|
||||
import (
|
||||
"errors"
|
||||
import (
|
||||
"errors"
|
||||
|
||||
"erupe-ce/network/clientctx"
|
||||
"erupe-ce/network"
|
||||
"erupe-ce/common/byteframe"
|
||||
"erupe-ce/network"
|
||||
"erupe-ce/network/clientctx"
|
||||
)
|
||||
|
||||
// The server sends different responses based on these values.
|
||||
@@ -13,7 +13,7 @@ const (
|
||||
TowerInfoTypeUnk0 = iota
|
||||
TowerInfoTypeTowerRankPoint
|
||||
TowerInfoTypeGetOwnTowerSkill
|
||||
TowerInfoTypeUnk3
|
||||
TowerInfoTypeGetOwnTowerLevelV3
|
||||
TowerInfoTypeTowerTouhaHistory
|
||||
TowerInfoTypeUnk5
|
||||
)
|
||||
|
||||
@@ -1,17 +1,18 @@
|
||||
package mhfpacket
|
||||
|
||||
import (
|
||||
"errors"
|
||||
import (
|
||||
"errors"
|
||||
|
||||
"erupe-ce/network/clientctx"
|
||||
"erupe-ce/network"
|
||||
"erupe-ce/common/byteframe"
|
||||
"erupe-ce/network"
|
||||
"erupe-ce/network/clientctx"
|
||||
)
|
||||
|
||||
// MsgMhfGuildHuntdata represents the MSG_MHF_GUILD_HUNTDATA
|
||||
type MsgMhfGuildHuntdata struct{
|
||||
AckHandle uint32
|
||||
Unk0 uint8
|
||||
type MsgMhfGuildHuntdata struct {
|
||||
AckHandle uint32
|
||||
Operation uint8
|
||||
GuildID uint32
|
||||
}
|
||||
|
||||
// Opcode returns the ID associated with this packet type.
|
||||
@@ -22,7 +23,10 @@ func (m *MsgMhfGuildHuntdata) Opcode() network.PacketID {
|
||||
// Parse parses the packet from binary
|
||||
func (m *MsgMhfGuildHuntdata) Parse(bf *byteframe.ByteFrame, ctx *clientctx.ClientContext) error {
|
||||
m.AckHandle = bf.ReadUint32()
|
||||
m.Unk0 = bf.ReadUint8()
|
||||
m.Operation = bf.ReadUint8()
|
||||
if m.Operation == 1 {
|
||||
m.GuildID = bf.ReadUint32()
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
|
||||
@@ -1,15 +1,19 @@
|
||||
package mhfpacket
|
||||
|
||||
import (
|
||||
"errors"
|
||||
import (
|
||||
"errors"
|
||||
|
||||
"erupe-ce/network/clientctx"
|
||||
"erupe-ce/network"
|
||||
"erupe-ce/common/byteframe"
|
||||
"erupe-ce/network"
|
||||
"erupe-ce/network/clientctx"
|
||||
)
|
||||
|
||||
// MsgMhfInfoJoint represents the MSG_MHF_INFO_JOINT
|
||||
type MsgMhfInfoJoint struct{}
|
||||
type MsgMhfInfoJoint struct {
|
||||
AckHandle uint32
|
||||
AllianceID uint32
|
||||
Unk uint32
|
||||
}
|
||||
|
||||
// Opcode returns the ID associated with this packet type.
|
||||
func (m *MsgMhfInfoJoint) Opcode() network.PacketID {
|
||||
@@ -18,7 +22,10 @@ func (m *MsgMhfInfoJoint) Opcode() network.PacketID {
|
||||
|
||||
// Parse parses the packet from binary
|
||||
func (m *MsgMhfInfoJoint) Parse(bf *byteframe.ByteFrame, ctx *clientctx.ClientContext) error {
|
||||
return errors.New("NOT IMPLEMENTED")
|
||||
m.AckHandle = bf.ReadUint32()
|
||||
m.AllianceID = bf.ReadUint32()
|
||||
m.Unk = bf.ReadUint32()
|
||||
return nil
|
||||
}
|
||||
|
||||
// Build builds a binary packet from the current data.
|
||||
|
||||
@@ -1,39 +1,43 @@
|
||||
package mhfpacket
|
||||
|
||||
import (
|
||||
"errors"
|
||||
"errors"
|
||||
|
||||
"erupe-ce/network/clientctx"
|
||||
"erupe-ce/network"
|
||||
"erupe-ce/common/byteframe"
|
||||
"erupe-ce/network"
|
||||
"erupe-ce/network/clientctx"
|
||||
)
|
||||
|
||||
type OperateGuildAction uint8
|
||||
|
||||
const (
|
||||
OPERATE_GUILD_DISBAND = 0x01
|
||||
OPERATE_GUILD_APPLY = 0x02
|
||||
OPERATE_GUILD_LEAVE = 0x03
|
||||
OPERATE_GUILD_RESIGN = 0x04
|
||||
OPERATE_GUILD_SET_APPLICATION_DENY = 0x05
|
||||
OPERATE_GUILD_SET_APPLICATION_ALLOW = 0x06
|
||||
OPERATE_GUILD_SET_AVOID_LEADERSHIP_TRUE = 0x07
|
||||
OPERATE_GUILD_SET_AVOID_LEADERSHIP_FALSE = 0x08
|
||||
OPERATE_GUILD_UPDATE_COMMENT = 0x09
|
||||
OPERATE_GUILD_DONATE_RANK = 0x0a
|
||||
OPERATE_GUILD_UPDATE_MOTTO = 0x0b
|
||||
OPERATE_GUILD_RENAME_PUGI_1 = 0x0c
|
||||
OPERATE_GUILD_RENAME_PUGI_2 = 0x0d
|
||||
OPERATE_GUILD_RENAME_PUGI_3 = 0x0e
|
||||
OPERATE_GUILD_CHANGE_PUGI_1 = 0x0f
|
||||
OPERATE_GUILD_CHANGE_PUGI_2 = 0x10
|
||||
OPERATE_GUILD_CHANGE_PUGI_3 = 0x11
|
||||
// pugi something
|
||||
OPERATE_GUILD_DONATE_EVENT = 0x15
|
||||
// pugi something
|
||||
OPERATE_GUILD_CHANGE_DIVA_PUGI_1 = 0x19
|
||||
OPERATE_GUILD_CHANGE_DIVA_PUGI_2 = 0x1a
|
||||
OPERATE_GUILD_CHANGE_DIVA_PUGI_3 = 0x1b
|
||||
OPERATE_GUILD_DISBAND = 0x01
|
||||
OPERATE_GUILD_APPLY = 0x02
|
||||
OPERATE_GUILD_LEAVE = 0x03
|
||||
OPERATE_GUILD_RESIGN = 0x04
|
||||
OPERATE_GUILD_SET_APPLICATION_DENY = 0x05
|
||||
OPERATE_GUILD_SET_APPLICATION_ALLOW = 0x06
|
||||
OPERATE_GUILD_SET_AVOID_LEADERSHIP_TRUE = 0x07
|
||||
OPERATE_GUILD_SET_AVOID_LEADERSHIP_FALSE = 0x08
|
||||
OPERATE_GUILD_UPDATE_COMMENT = 0x09
|
||||
OPERATE_GUILD_DONATE_RANK = 0x0a
|
||||
OPERATE_GUILD_UPDATE_MOTTO = 0x0b
|
||||
OPERATE_GUILD_RENAME_PUGI_1 = 0x0c
|
||||
OPERATE_GUILD_RENAME_PUGI_2 = 0x0d
|
||||
OPERATE_GUILD_RENAME_PUGI_3 = 0x0e
|
||||
OPERATE_GUILD_CHANGE_PUGI_1 = 0x0f
|
||||
OPERATE_GUILD_CHANGE_PUGI_2 = 0x10
|
||||
OPERATE_GUILD_CHANGE_PUGI_3 = 0x11
|
||||
OPERATE_GUILD_UNLOCK_OUTFIT = 0x12
|
||||
// 0x13 Unk
|
||||
// 0x14 Unk
|
||||
OPERATE_GUILD_DONATE_EVENT = 0x15
|
||||
OPERATE_GUILD_EVENT_EXCHANGE = 0x16
|
||||
// 0x17 Unk
|
||||
// 0x18 Unk
|
||||
OPERATE_GUILD_CHANGE_DIVA_PUGI_1 = 0x19
|
||||
OPERATE_GUILD_CHANGE_DIVA_PUGI_2 = 0x1a
|
||||
OPERATE_GUILD_CHANGE_DIVA_PUGI_3 = 0x1b
|
||||
)
|
||||
|
||||
// MsgMhfOperateGuild represents the MSG_MHF_OPERATE_GUILD
|
||||
@@ -41,7 +45,8 @@ type MsgMhfOperateGuild struct {
|
||||
AckHandle uint32
|
||||
GuildID uint32
|
||||
Action OperateGuildAction
|
||||
UnkData []byte
|
||||
Data1 *byteframe.ByteFrame
|
||||
Data2 *byteframe.ByteFrame
|
||||
}
|
||||
|
||||
// Opcode returns the ID associated with this packet type.
|
||||
@@ -54,8 +59,9 @@ func (m *MsgMhfOperateGuild) Parse(bf *byteframe.ByteFrame, ctx *clientctx.Clien
|
||||
m.AckHandle = bf.ReadUint32()
|
||||
m.GuildID = bf.ReadUint32()
|
||||
m.Action = OperateGuildAction(bf.ReadUint8())
|
||||
m.UnkData = bf.DataFromCurrent()
|
||||
bf.Seek(int64(len(bf.Data()) - 2), 0)
|
||||
dataLen := uint(bf.ReadUint8())
|
||||
m.Data1 = byteframe.NewByteFrameFromBytes(bf.ReadBytes(4))
|
||||
m.Data2 = byteframe.NewByteFrameFromBytes(bf.ReadBytes(dataLen))
|
||||
return nil
|
||||
}
|
||||
|
||||
|
||||
@@ -1,28 +1,28 @@
|
||||
package mhfpacket
|
||||
|
||||
import (
|
||||
"errors"
|
||||
"errors"
|
||||
|
||||
"erupe-ce/network/clientctx"
|
||||
"erupe-ce/network"
|
||||
"erupe-ce/common/byteframe"
|
||||
"erupe-ce/network"
|
||||
"erupe-ce/network/clientctx"
|
||||
)
|
||||
|
||||
type OperateJointAction uint8
|
||||
|
||||
const (
|
||||
OPERATE_JOINT_DISBAND = 0x01
|
||||
OPERATE_JOINT_LEAVE = 0x03
|
||||
OPERATE_JOINT_KICK = 0x09
|
||||
OPERATE_JOINT_DISBAND = 0x01
|
||||
OPERATE_JOINT_LEAVE = 0x03
|
||||
OPERATE_JOINT_KICK = 0x09
|
||||
)
|
||||
|
||||
// MsgMhfOperateJoint represents the MSG_MHF_OPERATE_JOINT
|
||||
type MsgMhfOperateJoint struct {
|
||||
AckHandle uint32
|
||||
AllianceID uint32
|
||||
GuildID uint32
|
||||
Action OperateJointAction
|
||||
UnkData []byte
|
||||
AckHandle uint32
|
||||
AllianceID uint32
|
||||
GuildID uint32
|
||||
Action OperateJointAction
|
||||
UnkData *byteframe.ByteFrame
|
||||
}
|
||||
|
||||
// Opcode returns the ID associated with this packet type.
|
||||
@@ -32,13 +32,13 @@ func (m *MsgMhfOperateJoint) Opcode() network.PacketID {
|
||||
|
||||
// Parse parses the packet from binary
|
||||
func (m *MsgMhfOperateJoint) Parse(bf *byteframe.ByteFrame, ctx *clientctx.ClientContext) error {
|
||||
m.AckHandle = bf.ReadUint32()
|
||||
m.AllianceID = bf.ReadUint32()
|
||||
m.GuildID = bf.ReadUint32()
|
||||
m.Action = OperateJointAction(bf.ReadUint8())
|
||||
m.UnkData = bf.DataFromCurrent()
|
||||
bf.Seek(int64(len(bf.Data()) - 2), 0)
|
||||
return nil
|
||||
m.AckHandle = bf.ReadUint32()
|
||||
m.AllianceID = bf.ReadUint32()
|
||||
m.GuildID = bf.ReadUint32()
|
||||
m.Action = OperateJointAction(bf.ReadUint8())
|
||||
m.UnkData = byteframe.NewByteFrameFromBytes(bf.DataFromCurrent())
|
||||
bf.Seek(int64(len(bf.Data())-2), 0)
|
||||
return nil
|
||||
}
|
||||
|
||||
// Build builds a binary packet from the current data.
|
||||
|
||||
@@ -1,17 +1,19 @@
|
||||
package mhfpacket
|
||||
|
||||
import (
|
||||
"errors"
|
||||
import (
|
||||
"errors"
|
||||
|
||||
"erupe-ce/network/clientctx"
|
||||
"erupe-ce/network"
|
||||
"erupe-ce/common/byteframe"
|
||||
"erupe-ce/network"
|
||||
"erupe-ce/network/clientctx"
|
||||
)
|
||||
|
||||
// TerminalLogEntry represents an entry in the MSG_SYS_TERMINAL_LOG packet.
|
||||
type TerminalLogEntry struct {
|
||||
// Unknown fields
|
||||
U0, U1, U2, U3, U4, U5, U6, U7, U8 uint32
|
||||
Index uint32
|
||||
Type1 uint8
|
||||
Type2 uint8
|
||||
Data []int16
|
||||
}
|
||||
|
||||
// MsgSysTerminalLog represents the MSG_SYS_TERMINAL_LOG
|
||||
@@ -37,15 +39,12 @@ func (m *MsgSysTerminalLog) Parse(bf *byteframe.ByteFrame, ctx *clientctx.Client
|
||||
|
||||
for i := 0; i < int(m.EntryCount); i++ {
|
||||
e := &TerminalLogEntry{}
|
||||
e.U0 = bf.ReadUint32()
|
||||
e.U1 = bf.ReadUint32()
|
||||
e.U2 = bf.ReadUint32()
|
||||
e.U3 = bf.ReadUint32()
|
||||
e.U4 = bf.ReadUint32()
|
||||
e.U5 = bf.ReadUint32()
|
||||
e.U6 = bf.ReadUint32()
|
||||
e.U7 = bf.ReadUint32()
|
||||
e.U8 = bf.ReadUint32()
|
||||
e.Index = bf.ReadUint32()
|
||||
e.Type1 = bf.ReadUint8()
|
||||
e.Type2 = bf.ReadUint8()
|
||||
for j := 0; j < 15; j++ {
|
||||
e.Data = append(e.Data, bf.ReadInt16())
|
||||
}
|
||||
m.Entries = append(m.Entries, e)
|
||||
}
|
||||
|
||||
|
||||
@@ -2,6 +2,8 @@ package mhfpacket
|
||||
|
||||
import (
|
||||
"errors"
|
||||
ps "erupe-ce/common/pascalstring"
|
||||
"golang.org/x/exp/slices"
|
||||
|
||||
"erupe-ce/common/byteframe"
|
||||
"erupe-ce/network"
|
||||
@@ -34,6 +36,12 @@ type ClientRight struct {
|
||||
Timestamp uint32
|
||||
}
|
||||
|
||||
type Course struct {
|
||||
Aliases []string
|
||||
ID uint16
|
||||
Value uint32
|
||||
}
|
||||
|
||||
// MsgSysUpdateRight represents the MSG_SYS_UPDATE_RIGHT
|
||||
type MsgSysUpdateRight struct {
|
||||
ClientRespAckHandle uint32 // If non-0, requests the client to send back a MSG_SYS_ACK packet with this value.
|
||||
@@ -63,9 +71,40 @@ func (m *MsgSysUpdateRight) Build(bf *byteframe.ByteFrame, ctx *clientctx.Client
|
||||
bf.WriteUint16(v.Unk0)
|
||||
bf.WriteUint32(v.Timestamp)
|
||||
}
|
||||
|
||||
bf.WriteUint16(m.UnkSize) // String of upto 0x800 bytes, update client login token / password in the game's launcherstate struct.
|
||||
//bf.WriteBytes(m.UpdatedClientLoginToken)
|
||||
|
||||
ps.Uint16(bf, "", false) // update client login token / password in the game's launcherstate struct
|
||||
return nil
|
||||
}
|
||||
|
||||
func Courses() []Course {
|
||||
var courses = []Course{
|
||||
{[]string{"Trial", "TL"}, 1, 0x00000002},
|
||||
{[]string{"HunterLife", "HL"}, 2, 0x00000004},
|
||||
{[]string{"ExtraA", "Extra", "EX"}, 3, 0x00000008},
|
||||
{[]string{"ExtraB"}, 4, 0x00000010},
|
||||
{[]string{"Mobile"}, 5, 0x00000020},
|
||||
{[]string{"Premium"}, 6, 0x00000040},
|
||||
{[]string{"Pallone"}, 7, 0x00000080},
|
||||
{[]string{"Assist", "Legend", "Rasta"}, 8, 0x00000100}, // Legend
|
||||
{[]string{"Netcafe", "N", "Cafe"}, 9, 0x00000200},
|
||||
{[]string{"Hiden", "Secret"}, 10, 0x00000400}, // Secret
|
||||
{[]string{"HunterSupport", "HunterAid", "Support", "Royal", "Aid"}, 11, 0x00000800}, // Royal
|
||||
{[]string{"NetcafeBoost", "NBoost", "Boost"}, 12, 0x00001000},
|
||||
}
|
||||
return courses
|
||||
}
|
||||
|
||||
// GetCourseStruct returns a slice of Course(s) from a rights integer
|
||||
func GetCourseStruct(rights uint32) []Course {
|
||||
var resp []Course
|
||||
s := Courses()
|
||||
slices.SortStableFunc(s, func(i, j Course) bool {
|
||||
return i.ID > j.ID
|
||||
})
|
||||
for _, course := range s {
|
||||
if rights-course.Value < 0x80000000 {
|
||||
resp = append(resp, course)
|
||||
rights -= course.Value
|
||||
}
|
||||
}
|
||||
return resp
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user