diff --git a/Erupe/common/pascalstring/pascalstring.go b/Erupe/common/pascalstring/pascalstring.go index 0d9fb7b97..8c815b097 100644 --- a/Erupe/common/pascalstring/pascalstring.go +++ b/Erupe/common/pascalstring/pascalstring.go @@ -2,19 +2,45 @@ package pascalstring import ( "erupe-ce/common/byteframe" + "golang.org/x/text/encoding/japanese" + "golang.org/x/text/transform" ) -func Uint8(bf *byteframe.ByteFrame, x string) { +func Uint8(bf *byteframe.ByteFrame, x string, t bool) { + if t { + e := japanese.ShiftJIS.NewEncoder() + xt, _, err := transform.String(e, x) + if err != nil { + panic(err) + } + x = xt + } bf.WriteUint8(uint8(len(x) + 1)) bf.WriteNullTerminatedBytes([]byte(x)) } -func Uint16(bf *byteframe.ByteFrame, x string) { +func Uint16(bf *byteframe.ByteFrame, x string, t bool) { + if t { + e := japanese.ShiftJIS.NewEncoder() + xt, _, err := transform.String(e, x) + if err != nil { + panic(err) + } + x = xt + } bf.WriteUint16(uint16(len(x) + 1)) bf.WriteNullTerminatedBytes([]byte(x)) } -func Uint32(bf *byteframe.ByteFrame, x string) { +func Uint32(bf *byteframe.ByteFrame, x string, t bool) { + if t { + e := japanese.ShiftJIS.NewEncoder() + xt, _, err := transform.String(e, x) + if err != nil { + panic(err) + } + x = xt + } bf.WriteUint32(uint32(len(x) + 1)) bf.WriteNullTerminatedBytes([]byte(x)) } diff --git a/Erupe/server/signserver/dsgn_resp.go b/Erupe/server/signserver/dsgn_resp.go index 141bbd03e..8511bd931 100644 --- a/Erupe/server/signserver/dsgn_resp.go +++ b/Erupe/server/signserver/dsgn_resp.go @@ -10,7 +10,7 @@ import ( "go.uber.org/zap" "golang.org/x/text/encoding/japanese" - "golang.org/x/text/transform" + "golang.org/x/text/transform" ) func paddedString(x string, size uint) []byte { @@ -58,7 +58,7 @@ func (s *Session) makeSignInResp(uid int) []byte { bf.WriteUint32(0xFFFFFFFF) // login_token_number bf.WriteBytes(paddedString(token, 16)) // login_token (16 byte padded string) bf.WriteUint32(uint32(time.Now().Unix())) // unk timestamp - ps.Uint8(bf, fmt.Sprintf("%s:%d", s.server.erupeConfig.HostIP, s.server.erupeConfig.Entrance.Port)) + ps.Uint8(bf, fmt.Sprintf("%s:%d", s.server.erupeConfig.HostIP, s.server.erupeConfig.Entrance.Port), false) for _, char := range chars { bf.WriteUint32(char.ID) @@ -92,17 +92,13 @@ func (s *Session) makeSignInResp(uid int) []byte { bf.WriteUint8(0) // notice_count // noticeText := "
Welcome to Erupe SU9!
Erupe is experimental software, we are not liable for any
issues caused by installing the software!

■Report bugs on Discord!

■Test everything!

■Don't talk to softlocking NPCs!

■Fork the code on GitHub!

Thank you to all of the contributors,

this wouldn't exist without you." - // notice_transformed, _, err := transform.String(t, noticeText) - // if err != nil { - // panic(err) - // } - // ps.Uint32(bf, notice_transformed) + // ps.Uint32(bf, noticeText, true) bf.WriteUint32(0) // some_last_played_character_id bf.WriteUint32(14) // unk_flags - ps.Uint16(bf, "") // filters + ps.Uint16(bf, "", false) // filters bf.WriteUint32(0xCA104E20) - ps.Uint16(bf, "") // encryption + ps.Uint16(bf, "", false) // encryption bf.WriteUint8(0x00) bf.WriteUint32(0xCA110001) bf.WriteUint32(0x4E200000)