From 843b6a9dff99b12d83f07bb33c020f10f3d4bbe4 Mon Sep 17 00:00:00 2001 From: wish Date: Sun, 17 Mar 2024 16:39:06 +1100 Subject: [PATCH 01/15] fix quest stampcard --- network/mhfpacket/msg_mhf_stampcard_stamp.go | 2 +- server/channelserver/handlers.go | 85 +++++++++++++++----- 2 files changed, 67 insertions(+), 20 deletions(-) diff --git a/network/mhfpacket/msg_mhf_stampcard_stamp.go b/network/mhfpacket/msg_mhf_stampcard_stamp.go index a783b3e91..521e42221 100644 --- a/network/mhfpacket/msg_mhf_stampcard_stamp.go +++ b/network/mhfpacket/msg_mhf_stampcard_stamp.go @@ -37,7 +37,7 @@ func (m *MsgMhfStampcardStamp) Parse(bf *byteframe.ByteFrame, ctx *clientctx.Cli } m.Stamps = bf.ReadUint16() bf.ReadUint16() // Zeroed - if _config.ErupeConfig.RealClientMode > _config.Z1 { + if _config.ErupeConfig.RealClientMode >= _config.Z2 { m.Reward1 = uint16(bf.ReadUint32()) m.Reward2 = uint16(bf.ReadUint32()) m.Item1 = uint16(bf.ReadUint32()) diff --git a/server/channelserver/handlers.go b/server/channelserver/handlers.go index 7188d8bab..d188faba5 100644 --- a/server/channelserver/handlers.go +++ b/server/channelserver/handlers.go @@ -1045,34 +1045,81 @@ func handleMsgMhfUpdateEtcPoint(s *Session, p mhfpacket.MHFPacket) { doAckSimpleSucceed(s, pkt.AckHandle, make([]byte, 4)) } +func getStampcardReward(secondStamp bool, HR uint16, GR uint16) mhfitem.MHFItemStack { + if GR > 0 { + if secondStamp { + return mhfitem.MHFItemStack{Item: mhfitem.MHFItem{ItemID: 5392}, Quantity: 4} + } else { + return mhfitem.MHFItemStack{Item: mhfitem.MHFItem{ItemID: 5392}, Quantity: 1} + } + } else { + if HR >= 300 { + if secondStamp { + return mhfitem.MHFItemStack{Item: mhfitem.MHFItem{ItemID: 5392}, Quantity: 3} + } else { + return mhfitem.MHFItemStack{Item: mhfitem.MHFItem{ItemID: 5392}, Quantity: 1} + } + } else if HR >= 100 { + if secondStamp { + return mhfitem.MHFItemStack{Item: mhfitem.MHFItem{ItemID: 5392}, Quantity: 1} + } else { + return mhfitem.MHFItemStack{Item: mhfitem.MHFItem{ItemID: 6164}, Quantity: 3} + } + } else if HR >= 50 { + if secondStamp { + return mhfitem.MHFItemStack{Item: mhfitem.MHFItem{ItemID: 6164}, Quantity: 3} + } else { + return mhfitem.MHFItemStack{Item: mhfitem.MHFItem{ItemID: 6164}, Quantity: 2} + } + } else { + if secondStamp { + return mhfitem.MHFItemStack{Item: mhfitem.MHFItem{ItemID: 6164}, Quantity: 2} + } else { + return mhfitem.MHFItemStack{Item: mhfitem.MHFItem{ItemID: 6164}, Quantity: 1} + } + } + } +} + func handleMsgMhfStampcardStamp(s *Session, p mhfpacket.MHFPacket) { pkt := p.(*mhfpacket.MsgMhfStampcardStamp) bf := byteframe.NewByteFrame() bf.WriteUint16(pkt.HR) - var stamps uint16 - _ = s.server.db.QueryRow(`SELECT stampcard FROM characters WHERE id = $1`, s.charID).Scan(&stamps) if _config.ErupeConfig.RealClientMode >= _config.G1 { bf.WriteUint16(pkt.GR) } + var stamps, rewardTier, rewardUnk uint16 + reward := mhfitem.MHFItemStack{Item: mhfitem.MHFItem{}} + s.server.db.QueryRow(`UPDATE characters SET stampcard = stampcard + $1 WHERE id = $2 RETURNING stampcard`, pkt.Stamps, s.charID).Scan(&stamps) + bf.WriteUint16(stamps - pkt.Stamps) bf.WriteUint16(stamps) - stamps += pkt.Stamps - bf.WriteUint16(stamps) - s.server.db.Exec(`UPDATE characters SET stampcard = $1 WHERE id = $2`, stamps, s.charID) - if stamps%30 == 0 { - bf.WriteUint16(2) - bf.WriteUint16(pkt.Reward2) - bf.WriteUint16(pkt.Item2) - bf.WriteUint16(pkt.Quantity2) - addWarehouseItem(s, mhfitem.MHFItemStack{Item: mhfitem.MHFItem{ItemID: pkt.Item2}, Quantity: pkt.Quantity2}) - } else if stamps%15 == 0 { - bf.WriteUint16(1) - bf.WriteUint16(pkt.Reward1) - bf.WriteUint16(pkt.Item1) - bf.WriteUint16(pkt.Quantity1) - addWarehouseItem(s, mhfitem.MHFItemStack{Item: mhfitem.MHFItem{ItemID: pkt.Item1}, Quantity: pkt.Quantity1}) - } else { - bf.WriteBytes(make([]byte, 8)) + + if stamps/30 > (stamps-pkt.Stamps)/30 { + rewardTier = 2 + if _config.ErupeConfig.RealClientMode < _config.Z2 { + rewardUnk = 10 + reward = getStampcardReward(true, pkt.HR, pkt.GR) + } else { + rewardUnk = pkt.Reward2 + reward = mhfitem.MHFItemStack{Item: mhfitem.MHFItem{ItemID: pkt.Item2}, Quantity: pkt.Quantity2} + } + addWarehouseItem(s, reward) + } else if stamps/15 > (stamps-pkt.Stamps)/15 { + rewardTier = 1 + if _config.ErupeConfig.RealClientMode < _config.Z2 { + rewardUnk = 10 + reward = getStampcardReward(false, pkt.HR, pkt.GR) + } else { + rewardUnk = pkt.Reward1 + reward = mhfitem.MHFItemStack{Item: mhfitem.MHFItem{ItemID: pkt.Item1}, Quantity: pkt.Quantity1} + } + addWarehouseItem(s, reward) } + + bf.WriteUint16(rewardTier) + bf.WriteUint16(rewardUnk) + bf.WriteUint16(reward.Item.ItemID) + bf.WriteUint16(reward.Quantity) doAckBufSucceed(s, pkt.AckHandle, bf.Data()) } From 100ec30fba5dc70ae0a651663a3bd014198a1cd0 Mon Sep 17 00:00:00 2001 From: wish Date: Sun, 16 Jun 2024 17:46:12 +1000 Subject: [PATCH 02/15] fix GetCafeDuration --- server/channelserver/handlers_cafe.go | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/server/channelserver/handlers_cafe.go b/server/channelserver/handlers_cafe.go index b87bac5ff..2211c5c64 100644 --- a/server/channelserver/handlers_cafe.go +++ b/server/channelserver/handlers_cafe.go @@ -4,6 +4,7 @@ import ( "erupe-ce/common/byteframe" "erupe-ce/common/mhfcourse" ps "erupe-ce/common/pascalstring" + _config "erupe-ce/config" "erupe-ce/network/mhfpacket" "fmt" "go.uber.org/zap" @@ -92,10 +93,11 @@ func handleMsgMhfGetCafeDuration(s *Session, p mhfpacket.MHFPacket) { if mhfcourse.CourseExists(30, s.courses) { cafeTime = uint32(TimeAdjusted().Unix()) - uint32(s.sessionStart) + cafeTime } - bf.WriteUint32(cafeTime) // Total cafe time - bf.WriteUint16(0) - ps.Uint16(bf, fmt.Sprintf(s.server.i18n.cafe.reset, int(cafeReset.Month()), cafeReset.Day()), true) - + bf.WriteUint32(cafeTime) + if _config.ErupeConfig.RealClientMode >= _config.G10 { // TODO: Confirm G10, not in G9.1 + bf.WriteUint16(0) + ps.Uint16(bf, fmt.Sprintf(s.server.i18n.cafe.reset, int(cafeReset.Month()), cafeReset.Day()), true) + } doAckBufSucceed(s, pkt.AckHandle, bf.Data()) } From e12f444b8da121e2aa05e8f28d6347a60ff95ebd Mon Sep 17 00:00:00 2001 From: wish Date: Sun, 16 Jun 2024 18:16:12 +1000 Subject: [PATCH 03/15] fix GetCafeDuration --- server/channelserver/handlers_cafe.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/server/channelserver/handlers_cafe.go b/server/channelserver/handlers_cafe.go index 2211c5c64..4449c3316 100644 --- a/server/channelserver/handlers_cafe.go +++ b/server/channelserver/handlers_cafe.go @@ -94,7 +94,7 @@ func handleMsgMhfGetCafeDuration(s *Session, p mhfpacket.MHFPacket) { cafeTime = uint32(TimeAdjusted().Unix()) - uint32(s.sessionStart) + cafeTime } bf.WriteUint32(cafeTime) - if _config.ErupeConfig.RealClientMode >= _config.G10 { // TODO: Confirm G10, not in G9.1 + if _config.ErupeConfig.RealClientMode >= _config.Z2 { // TODO: Confirm Z2, not in Z1 bf.WriteUint16(0) ps.Uint16(bf, fmt.Sprintf(s.server.i18n.cafe.reset, int(cafeReset.Month()), cafeReset.Day()), true) } From 12c7774cc125d0f87a0cf1e05c6b7473b228cf12 Mon Sep 17 00:00:00 2001 From: wish Date: Tue, 25 Jun 2024 20:35:56 +1000 Subject: [PATCH 04/15] fix GetCafeDuration --- server/channelserver/handlers_cafe.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/server/channelserver/handlers_cafe.go b/server/channelserver/handlers_cafe.go index 4449c3316..406732371 100644 --- a/server/channelserver/handlers_cafe.go +++ b/server/channelserver/handlers_cafe.go @@ -94,7 +94,7 @@ func handleMsgMhfGetCafeDuration(s *Session, p mhfpacket.MHFPacket) { cafeTime = uint32(TimeAdjusted().Unix()) - uint32(s.sessionStart) + cafeTime } bf.WriteUint32(cafeTime) - if _config.ErupeConfig.RealClientMode >= _config.Z2 { // TODO: Confirm Z2, not in Z1 + if _config.ErupeConfig.RealClientMode >= _config.ZZ { bf.WriteUint16(0) ps.Uint16(bf, fmt.Sprintf(s.server.i18n.cafe.reset, int(cafeReset.Month()), cafeReset.Day()), true) } From dd13713bc15fff2a14ec53e7b36eeb85fd97921e Mon Sep 17 00:00:00 2001 From: wish Date: Tue, 25 Jun 2024 22:50:58 +1000 Subject: [PATCH 05/15] fix parsing SysTerminalLog --- network/mhfpacket/msg_sys_terminal_log.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/network/mhfpacket/msg_sys_terminal_log.go b/network/mhfpacket/msg_sys_terminal_log.go index 5033346b4..bad160a73 100644 --- a/network/mhfpacket/msg_sys_terminal_log.go +++ b/network/mhfpacket/msg_sys_terminal_log.go @@ -40,8 +40,8 @@ func (m *MsgSysTerminalLog) Parse(bf *byteframe.ByteFrame, ctx *clientctx.Client entryCount := int(bf.ReadUint16()) bf.ReadUint16() // Zeroed - var e TerminalLogEntry for i := 0; i < entryCount; i++ { + var e TerminalLogEntry e.Index = bf.ReadUint32() e.Type1 = bf.ReadUint8() e.Type2 = bf.ReadUint8() From 0caaeac3af872a4c1e77e13f0d84b56516a1c9c8 Mon Sep 17 00:00:00 2001 From: wish Date: Mon, 15 Jul 2024 01:07:50 +1000 Subject: [PATCH 06/15] initial ngword commit --- common/stringsupport/string_convert.go | 13 +++++++ server/signserver/dsgn_resp.go | 49 +++++++++++++++++++++++++- 2 files changed, 61 insertions(+), 1 deletion(-) diff --git a/common/stringsupport/string_convert.go b/common/stringsupport/string_convert.go index de4d04364..3fb4bb097 100644 --- a/common/stringsupport/string_convert.go +++ b/common/stringsupport/string_convert.go @@ -29,6 +29,19 @@ func SJISToUTF8(b []byte) string { return string(result) } +func ToNGWord(x string) []uint16 { + var w []uint16 + for _, r := range []rune(x) { + if r > 0xFF { + t := UTF8ToSJIS(string(r)) + w = append(w, uint16(t[1])<<8|uint16(t[0])) + } else { + w = append(w, uint16(r)) + } + } + return w +} + func PaddedString(x string, size uint, t bool) []byte { if t { e := japanese.ShiftJIS.NewEncoder() diff --git a/server/signserver/dsgn_resp.go b/server/signserver/dsgn_resp.go index 250bdae46..3ae65a512 100644 --- a/server/signserver/dsgn_resp.go +++ b/server/signserver/dsgn_resp.go @@ -135,7 +135,54 @@ func (s *Session) makeSignResponse(uid uint32) []byte { bf.WriteUint32(s.server.getLastCID(uid)) bf.WriteUint32(s.server.getUserRights(uid)) - ps.Uint16(bf, "", false) // filters + + namNGWords := []string{"test", "痴女", "てすと"} + msgNGWords := []string{"test", "痴女", "てすと"} + + filters := byteframe.NewByteFrame() + filters.WriteNullTerminatedBytes([]byte("smc")) + smc := byteframe.NewByteFrame() + //smcBytes, _ := hex.DecodeString("3D000000818100000000000029000000816A0000000000002800000081690000000000002100000081490000000000002F000000815E0000000000002B000000817B00000000000026000000819500000000000082500000310000000000000082DA0000837B0000CE00DE0082D9DE00837ADE0082D9814A837A814ACE00814A0000000082D7000083780000CD00DE0082D6DE008377DE0082D6814ACD00814A8377814A0000000082C5000083660000C300DE0082C4DE008365DE0082C4814A8365814AC300814A81A7814A81A7DE0089B3DE0089B3814A0000000082D1000083720000CB00DE0082D0DE008371DE0082D0814A8371814ACB00814A0000000082C7000083680000C400DE0082C6DE008367DE0082C6814A8367814AC400814A84B0DE0084B0814A84A5DE0084A5814A0000000082CE0000836F0000CA00DE0082CDDE00836EDE0094AADE0082CD814A836E814ACA00814A94AA814A0000000082C2DE00836400008363DE0082C2814A8363814AC200DE00C200814A82C3000082C1DE008362DE00AF00DE0082C1814A8362814AAF00814A0000000082D4000083750000CC00DE0083940000B300DE0082A4814A82A4DE008345DE00A900DE0082A3DE0082D3DE008374DE00CC00814A0000000082C0000083610000C100DE0082BFDE008360DE0082BF814A8360814AC100814A90E7814A90E7DE000000000082BE0000835F0000C000DE0082BDDE00835EDE00975BDE0082BD814A835E814AC000814A975B814A0000000082BC0000835D0000BF00DE0082BBDE00835CDE0082BB814A835C814ABF00814A8393DE008393814ADD00814ADD00DE00838ADE00D800DE00D800814A838A814A0000000082BA0000BE00DE0082B9DE00835ADE0082B9814A835A814ABE00814A835B00000000000082B8000083590000BD00DE0082B7DE008358DE0082B7814A8358814ABD00814A0000000082B6000083570000BC00DE0082B5DE008356DE0082B5814A8356814ABC00814A0000000082B4000083550000BB00DE0082B3DE008354DE0082B3814A8354814ABB00814A0000000082B2000083530000BA00DE0082B1DE008352DE0082B1814A8352814ABA00814A0000000082B0000083510000B900DE0082AFDE008350DE0082AF814A8350814AB900814A8396DE008396814A0000000082AE0000834F0000B800DE0082ADDE00834EDE0082AD814A834E814AB800814A0000000082AC0000834D0000B700DE0082ABDE00834CDE0082AB814A834C814AB700814A0000000082AA0000834B0000B600DE008395DE00834ADE0082A9DE0097CDDE008395814A834A814A82A9814A97CD814AB600814A0000000082F0000083920000A60000000000000082ED0000838F0000DC000000838E00000000000082EB0000838D0000DB00000081A000008CFB00000000000082EA0000838C0000DA0000000000000082E90000838B0000D90000000000000082E80000838A0000D80000000000000082E7000083890000D70000000000000082E6000083880000D6000000AE00000082E50000838700000000000082E4000083860000D5000000AD00000082E30000838500000000000082E2000083840000D4000000AC00000082E10000838300000000000082E0000083820000D30000000000000082DF000083810000D20000004D0045000000000082DE000083800000D10000000000000082DD0000837E0000D00000000000000082DC0000837D0000CF0000000000000082D90000837A0000CE0000000000000082D6000083770000CD0000000000000082D3000083740000CC0000000000000082D0000083710000CB0000000000000082CD0000836E0000CA00000094AA00000000000082CC0000836D0000C90000000000000082CB0000836C0000C80000000000000082CA0000836B0000C70000000000000082C90000836A0000C600000093F100000000000082C8000083690000C50000000000000082C6000083670000C400000084B0000084A500000000000082C4000083650000C300000081A7000089B300000000000082C2000083630000C200000082C1000083620000AF0000000000000082BF000083600000C100000090E700000000000082BD0000835E0000C0000000975B00000000000082BB0000835C0000BF0000000000000082B90000835A0000BE0000000000000082B7000083580000BD0000000000000082B5000083560000BC0000000000000082B3000083540000BB0000000000000082B1000083520000BA0000000000000082AF000083500000B9000000839600000000000082AD0000834E0000B80000000000000082AB0000834C0000B70000000000000082A90000834A0000B60000008395000097CD00000000000082A8000083490000B5000000AB00000082A70000834800000000000082A6000083470000B4000000AA00000082A50000834600008D4800000000000082A4000083450000B3000000A900000082A30000834400000000000082A2000083430000B2000000A800000082A100008342000000000000A7000000B1000000829F000082A00000834000008341000000000000815B0000815C0000815D0000816000002D000000817C0000B000000088EA00000000000039000000825800000000000038000000825700000000000037000000825600000000000036000000825500000000000035000000825400000000000034000000825300000000000033000000825200000000000032000000825100000000000082DB0000837C0000CE00DF0082D9DF00837ADF00837A818B82D9818BCE00818B0000000082D8000083790000CD00DF0082D6DF008377DF008377818B82D6818BCD00818B0000000082D5000083760000CC00DF0082D3DF008374DF008374818B82D3818BCC00818B0000000082D2000083730000CB00DF0082D0DF008371DF008371818B82D0818BCB00818B0000000082CF000083700000CA00DF0082CDDF00836EDF00836E818B82CD818BCA00818B94AADF0094AA814B0000000082790000829A00005A0000007A00000083A40000000000008278000082990000590000007900000083B200008454000084850000000000008277000082980000580000007800000083B4000083D4000084560000817E000084870000875D0000000000008276000082970000570000007700000083D6000084590000848A0000848B0000000000008275000082960000560000007600000083CB000083D2000087580000000000008274000082950000550000007500000083CA000081BE0000000000008273000082940000540000007400000083B1000083D100008453000084840000000000002400000053000000730000008190000081E70000827200008293000000000000827100008292000052000000720000008460000084910000000000008270000082910000510000007100000000000000826F000082900000500000007000000083AF000083CF0000845100008482000000000000826E0000828F00004F0000006F000000819B000083AD000083CD0000844F00008480000081FC0000815A000030000000824F000000000000826D0000828E00004E0000006E00000083AB000083C50000DD00000082F100008393000000000000826C0000828D00004D0000006D00000083AA0000844D0000847D000000000000826B0000828C00004C0000006C000000879800007C00000000000000826A0000828B00004B0000006B00000083A8000083C80000844B0000847B00000000000082690000828A00004A0000006A000000000000008268000082890000490000006900000083A7000087540000000000008267000082880000480000006800000083A50000844E0000847E000000000000826500008286000046000000660000000000000082660000828700004700000067000000000000008264000082850000450000006500000083A3000083C300008445000084460000847500008476000081B80000000000008263000082840000440000006400000000000000430000008283000063000000845200008483000082620000818E0000000000004200000082610000828200006200000083C0000083A000008442000084720000848C0000848E000081F30000000000002700000081660000000000004100000082600000610000008281000083BF000040000000819700008470000081F0000084400000839F00000000000022000000816800000000000025000000819300000000000000000000") + //smc.WriteBytes(smcBytes) + filters.SetLE() + filters.WriteUint32(uint32(len(smc.Data()))) + filters.WriteBytes(smc.Data()) + + filters.WriteNullTerminatedBytes([]byte("nam")) + nam := byteframe.NewByteFrame() + nam.SetLE() + for _, word := range namNGWords { + parts := stringsupport.ToNGWord(word) + nam.WriteUint32(uint32(len(parts))) + for _, part := range parts { + nam.WriteUint16(part) + nam.WriteInt16(-1) // TODO: figure out how this value relates to corresponding SMC part + } + nam.WriteUint16(0) + nam.WriteInt16(-1) + } + filters.WriteUint32(uint32(len(nam.Data()))) + filters.WriteBytes(nam.Data()) + + filters.WriteNullTerminatedBytes([]byte("msg")) + msg := byteframe.NewByteFrame() + msg.SetLE() + for _, word := range msgNGWords { + parts := stringsupport.ToNGWord(word) + msg.WriteUint32(uint32(len(parts))) + for _, part := range parts { + msg.WriteUint16(part) + msg.WriteInt16(-1) + } + msg.WriteUint16(0) + msg.WriteInt16(-1) + } + filters.WriteUint32(uint32(len(msg.Data()))) + filters.WriteBytes(msg.Data()) + + bf.WriteUint16(uint16(len(filters.Data()))) + bf.WriteBytes(filters.Data()) + if s.client == VITA || s.client == PS3 || s.client == PS4 { var psnUser string s.server.db.QueryRow("SELECT psn_id FROM users WHERE id = $1", uid).Scan(&psnUser) From 632aa081b96261883e84fe0454737b0587974df4 Mon Sep 17 00:00:00 2001 From: wish Date: Tue, 16 Jul 2024 00:57:59 +1000 Subject: [PATCH 07/15] decode SMC table --- common/stringsupport/string_convert.go | 6 +- server/signserver/dsgn_resp.go | 137 ++++++++++++++++++++++++- 2 files changed, 139 insertions(+), 4 deletions(-) diff --git a/common/stringsupport/string_convert.go b/common/stringsupport/string_convert.go index 3fb4bb097..96c14c9ba 100644 --- a/common/stringsupport/string_convert.go +++ b/common/stringsupport/string_convert.go @@ -34,7 +34,11 @@ func ToNGWord(x string) []uint16 { for _, r := range []rune(x) { if r > 0xFF { t := UTF8ToSJIS(string(r)) - w = append(w, uint16(t[1])<<8|uint16(t[0])) + if len(t) > 1 { + w = append(w, uint16(t[1])<<8|uint16(t[0])) + } else { + w = append(w, uint16(t[0])) + } } else { w = append(w, uint16(r)) } diff --git a/server/signserver/dsgn_resp.go b/server/signserver/dsgn_resp.go index 3ae65a512..3066dc3d6 100644 --- a/server/signserver/dsgn_resp.go +++ b/server/signserver/dsgn_resp.go @@ -140,11 +140,142 @@ func (s *Session) makeSignResponse(uid uint32) []byte { msgNGWords := []string{"test", "痴女", "てすと"} filters := byteframe.NewByteFrame() + filters.SetLE() filters.WriteNullTerminatedBytes([]byte("smc")) smc := byteframe.NewByteFrame() - //smcBytes, _ := hex.DecodeString("3D000000818100000000000029000000816A0000000000002800000081690000000000002100000081490000000000002F000000815E0000000000002B000000817B00000000000026000000819500000000000082500000310000000000000082DA0000837B0000CE00DE0082D9DE00837ADE0082D9814A837A814ACE00814A0000000082D7000083780000CD00DE0082D6DE008377DE0082D6814ACD00814A8377814A0000000082C5000083660000C300DE0082C4DE008365DE0082C4814A8365814AC300814A81A7814A81A7DE0089B3DE0089B3814A0000000082D1000083720000CB00DE0082D0DE008371DE0082D0814A8371814ACB00814A0000000082C7000083680000C400DE0082C6DE008367DE0082C6814A8367814AC400814A84B0DE0084B0814A84A5DE0084A5814A0000000082CE0000836F0000CA00DE0082CDDE00836EDE0094AADE0082CD814A836E814ACA00814A94AA814A0000000082C2DE00836400008363DE0082C2814A8363814AC200DE00C200814A82C3000082C1DE008362DE00AF00DE0082C1814A8362814AAF00814A0000000082D4000083750000CC00DE0083940000B300DE0082A4814A82A4DE008345DE00A900DE0082A3DE0082D3DE008374DE00CC00814A0000000082C0000083610000C100DE0082BFDE008360DE0082BF814A8360814AC100814A90E7814A90E7DE000000000082BE0000835F0000C000DE0082BDDE00835EDE00975BDE0082BD814A835E814AC000814A975B814A0000000082BC0000835D0000BF00DE0082BBDE00835CDE0082BB814A835C814ABF00814A8393DE008393814ADD00814ADD00DE00838ADE00D800DE00D800814A838A814A0000000082BA0000BE00DE0082B9DE00835ADE0082B9814A835A814ABE00814A835B00000000000082B8000083590000BD00DE0082B7DE008358DE0082B7814A8358814ABD00814A0000000082B6000083570000BC00DE0082B5DE008356DE0082B5814A8356814ABC00814A0000000082B4000083550000BB00DE0082B3DE008354DE0082B3814A8354814ABB00814A0000000082B2000083530000BA00DE0082B1DE008352DE0082B1814A8352814ABA00814A0000000082B0000083510000B900DE0082AFDE008350DE0082AF814A8350814AB900814A8396DE008396814A0000000082AE0000834F0000B800DE0082ADDE00834EDE0082AD814A834E814AB800814A0000000082AC0000834D0000B700DE0082ABDE00834CDE0082AB814A834C814AB700814A0000000082AA0000834B0000B600DE008395DE00834ADE0082A9DE0097CDDE008395814A834A814A82A9814A97CD814AB600814A0000000082F0000083920000A60000000000000082ED0000838F0000DC000000838E00000000000082EB0000838D0000DB00000081A000008CFB00000000000082EA0000838C0000DA0000000000000082E90000838B0000D90000000000000082E80000838A0000D80000000000000082E7000083890000D70000000000000082E6000083880000D6000000AE00000082E50000838700000000000082E4000083860000D5000000AD00000082E30000838500000000000082E2000083840000D4000000AC00000082E10000838300000000000082E0000083820000D30000000000000082DF000083810000D20000004D0045000000000082DE000083800000D10000000000000082DD0000837E0000D00000000000000082DC0000837D0000CF0000000000000082D90000837A0000CE0000000000000082D6000083770000CD0000000000000082D3000083740000CC0000000000000082D0000083710000CB0000000000000082CD0000836E0000CA00000094AA00000000000082CC0000836D0000C90000000000000082CB0000836C0000C80000000000000082CA0000836B0000C70000000000000082C90000836A0000C600000093F100000000000082C8000083690000C50000000000000082C6000083670000C400000084B0000084A500000000000082C4000083650000C300000081A7000089B300000000000082C2000083630000C200000082C1000083620000AF0000000000000082BF000083600000C100000090E700000000000082BD0000835E0000C0000000975B00000000000082BB0000835C0000BF0000000000000082B90000835A0000BE0000000000000082B7000083580000BD0000000000000082B5000083560000BC0000000000000082B3000083540000BB0000000000000082B1000083520000BA0000000000000082AF000083500000B9000000839600000000000082AD0000834E0000B80000000000000082AB0000834C0000B70000000000000082A90000834A0000B60000008395000097CD00000000000082A8000083490000B5000000AB00000082A70000834800000000000082A6000083470000B4000000AA00000082A50000834600008D4800000000000082A4000083450000B3000000A900000082A30000834400000000000082A2000083430000B2000000A800000082A100008342000000000000A7000000B1000000829F000082A00000834000008341000000000000815B0000815C0000815D0000816000002D000000817C0000B000000088EA00000000000039000000825800000000000038000000825700000000000037000000825600000000000036000000825500000000000035000000825400000000000034000000825300000000000033000000825200000000000032000000825100000000000082DB0000837C0000CE00DF0082D9DF00837ADF00837A818B82D9818BCE00818B0000000082D8000083790000CD00DF0082D6DF008377DF008377818B82D6818BCD00818B0000000082D5000083760000CC00DF0082D3DF008374DF008374818B82D3818BCC00818B0000000082D2000083730000CB00DF0082D0DF008371DF008371818B82D0818BCB00818B0000000082CF000083700000CA00DF0082CDDF00836EDF00836E818B82CD818BCA00818B94AADF0094AA814B0000000082790000829A00005A0000007A00000083A40000000000008278000082990000590000007900000083B200008454000084850000000000008277000082980000580000007800000083B4000083D4000084560000817E000084870000875D0000000000008276000082970000570000007700000083D6000084590000848A0000848B0000000000008275000082960000560000007600000083CB000083D2000087580000000000008274000082950000550000007500000083CA000081BE0000000000008273000082940000540000007400000083B1000083D100008453000084840000000000002400000053000000730000008190000081E70000827200008293000000000000827100008292000052000000720000008460000084910000000000008270000082910000510000007100000000000000826F000082900000500000007000000083AF000083CF0000845100008482000000000000826E0000828F00004F0000006F000000819B000083AD000083CD0000844F00008480000081FC0000815A000030000000824F000000000000826D0000828E00004E0000006E00000083AB000083C50000DD00000082F100008393000000000000826C0000828D00004D0000006D00000083AA0000844D0000847D000000000000826B0000828C00004C0000006C000000879800007C00000000000000826A0000828B00004B0000006B00000083A8000083C80000844B0000847B00000000000082690000828A00004A0000006A000000000000008268000082890000490000006900000083A7000087540000000000008267000082880000480000006800000083A50000844E0000847E000000000000826500008286000046000000660000000000000082660000828700004700000067000000000000008264000082850000450000006500000083A3000083C300008445000084460000847500008476000081B80000000000008263000082840000440000006400000000000000430000008283000063000000845200008483000082620000818E0000000000004200000082610000828200006200000083C0000083A000008442000084720000848C0000848E000081F30000000000002700000081660000000000004100000082600000610000008281000083BF000040000000819700008470000081F0000084400000839F00000000000022000000816800000000000025000000819300000000000000000000") - //smc.WriteBytes(smcBytes) - filters.SetLE() + smc.SetLE() + smcData := []struct { + charGroup [][]rune + }{ + {[][]rune{{'='}, {'='}}}, + {[][]rune{{')'}, {')'}}}, + {[][]rune{{'('}, {'('}}}, + {[][]rune{{'!'}, {'!'}}}, + {[][]rune{{'/'}, {'/'}}}, + {[][]rune{{'+'}, {'+'}}}, + {[][]rune{{'&'}, {'&'}}}, + {[][]rune{{'ぼ'}, {'ボ'}, {'ホ', '゙'}, {'ほ', '゙'}, {'ホ', '゙'}, {'ほ', '゛'}, {'ホ', '゛'}, {'ホ', '゛'}}}, + {[][]rune{{'べ'}, {'ベ'}, {'ヘ', '゙'}, {'へ', '゙'}, {'ヘ', '゙'}, {'へ', '゛'}, {'ヘ', '゛'}, {'ヘ', '゛'}}}, + {[][]rune{{'で'}, {'デ'}, {'テ', '゙'}, {'て', '゙'}, {'テ', '゙'}, {'て', '゛'}, {'テ', '゛'}, {'テ', '゛'}, {'〒', '゛'}, {'〒', '゙'}, {'乙', '゙'}, {'乙', '゛'}}}, + {[][]rune{{'び'}, {'ビ'}, {'ヒ', '゙'}, {'ひ', '゙'}, {'ヒ', '゙'}, {'ひ', '゛'}, {'ヒ', '゛'}, {'ヒ', '゛'}}}, + {[][]rune{{'ど'}, {'ド'}, {'ト', '゙'}, {'と', '゙'}, {'ト', '゙'}, {'と', '゛'}, {'ト', '゛'}, {'ト', '゛'}, {'┣', '゙'}, {'┣', '゛'}, {'├', '゙'}, {'├', '゛'}}}, + {[][]rune{{'ば'}, {'バ'}, {'ハ', '゙'}, {'は', '゙'}, {'ハ', '゙'}, {'八', '゙'}, {'は', '゛'}, {'ハ', '゛'}, {'ハ', '゛'}, {'八', '゛'}}}, + {[][]rune{{'つ', '゙'}, {'ヅ'}, {'ツ', '゙'}, {'つ', '゛'}, {'ツ', '゛'}, {'ツ', '゙'}, {'ツ', '゛'}, {'づ'}, {'っ', '゙'}, {'ッ', '゙'}, {'ッ', '゙'}, {'っ', '゛'}, {'ッ', '゛'}, {'ッ', '゛'}}}, + {[][]rune{{'ぶ'}, {'ブ'}, {'フ', '゙'}, {'ヴ'}, {'ウ', '゙'}, {'う', '゛'}, {'う', '゙'}, {'ウ', '゙'}, {'ゥ', '゙'}, {'ぅ', '゙'}, {'ふ', '゙'}, {'フ', '゙'}, {'フ', '゛'}}}, + {[][]rune{{'ぢ'}, {'ヂ'}, {'チ', '゙'}, {'ち', '゙'}, {'チ', '゙'}, {'ち', '゛'}, {'チ', '゛'}, {'チ', '゛'}, {'千', '゛'}, {'千', '゙'}}}, + {[][]rune{{'だ'}, {'ダ'}, {'タ', '゙'}, {'た', '゙'}, {'タ', '゙'}, {'夕', '゙'}, {'た', '゛'}, {'タ', '゛'}, {'タ', '゛'}, {'夕', '゛'}}}, + {[][]rune{{'ぞ'}, {'ゾ'}, {'ソ', '゙'}, {'そ', '゙'}, {'ソ', '゙'}, {'そ', '゛'}, {'ソ', '゛'}, {'ソ', '゛'}, {'ン', '゙'}, {'ン', '゛'}, {'ン', '゛'}, {'ン', '゙'}, {'リ', '゙'}, {'リ', '゙'}, {'リ', '゛'}, {'リ', '゛'}}}, + {[][]rune{{'ぜ'}, {'セ', '゙'}, {'せ', '゙'}, {'セ', '゙'}, {'せ', '゛'}, {'セ', '゛'}, {'セ', '゛'}, {'ゼ'}}}, + {[][]rune{{'ず'}, {'ズ'}, {'ス', '゙'}, {'す', '゙'}, {'ス', '゙'}, {'す', '゛'}, {'ス', '゛'}, {'ス', '゛'}}}, + {[][]rune{{'じ'}, {'ジ'}, {'シ', '゙'}, {'し', '゙'}, {'シ', '゙'}, {'し', '゛'}, {'シ', '゛'}, {'シ', '゛'}}}, + {[][]rune{{'ざ'}, {'ザ'}, {'サ', '゙'}, {'さ', '゙'}, {'サ', '゙'}, {'さ', '゛'}, {'サ', '゛'}, {'サ', '゛'}}}, + {[][]rune{{'ご'}, {'ゴ'}, {'コ', '゙'}, {'こ', '゙'}, {'コ', '゙'}, {'こ', '゛'}, {'コ', '゛'}, {'コ', '゛'}}}, + {[][]rune{{'げ'}, {'ゲ'}, {'ケ', '゙'}, {'け', '゙'}, {'ケ', '゙'}, {'け', '゛'}, {'ケ', '゛'}, {'ケ', '゛'}, {'ヶ', '゙'}, {'ヶ', '゛'}}}, + {[][]rune{{'ぐ'}, {'グ'}, {'ク', '゙'}, {'く', '゙'}, {'ク', '゙'}, {'く', '゛'}, {'ク', '゛'}, {'ク', '゛'}}}, + {[][]rune{{'ぎ'}, {'ギ'}, {'キ', '゙'}, {'き', '゙'}, {'キ', '゙'}, {'き', '゛'}, {'キ', '゛'}, {'キ', '゛'}}}, + {[][]rune{{'が'}, {'ガ'}, {'カ', '゙'}, {'ヵ', '゙'}, {'カ', '゙'}, {'か', '゙'}, {'力', '゙'}, {'ヵ', '゛'}, {'カ', '゛'}, {'か', '゛'}, {'力', '゛'}, {'カ', '゛'}}}, + {[][]rune{{'を'}, {'ヲ'}, {'ヲ'}}}, + {[][]rune{{'わ'}, {'ワ'}, {'ワ'}, {'ヮ'}}}, + {[][]rune{{'ろ'}, {'ロ'}, {'ロ'}, {'□'}, {'口'}}}, + {[][]rune{{'れ'}, {'レ'}, {'レ'}}}, + {[][]rune{{'る'}, {'ル'}, {'ル'}}}, + {[][]rune{{'り'}, {'リ'}, {'リ'}}}, + {[][]rune{{'ら'}, {'ラ'}, {'ラ'}}}, + {[][]rune{{'よ'}, {'ヨ'}, {'ヨ'}, {'ョ'}, {'ょ'}, {'ョ'}}}, + {[][]rune{{'ゆ'}, {'ユ'}, {'ユ'}, {'ュ'}, {'ゅ'}, {'ュ'}}}, + {[][]rune{{'や'}, {'ヤ'}, {'ヤ'}, {'ャ'}, {'ゃ'}, {'ャ'}}}, + {[][]rune{{'も'}, {'モ'}, {'モ'}}}, + {[][]rune{{'め'}, {'メ'}, {'メ'}, {'M', 'E'}}}, + {[][]rune{{'む'}, {'ム'}, {'ム'}}}, + {[][]rune{{'み'}, {'ミ'}, {'ミ'}}}, + {[][]rune{{'ま'}, {'マ'}, {'マ'}}}, + {[][]rune{{'ほ'}, {'ホ'}, {'ホ'}}}, + {[][]rune{{'へ'}, {'ヘ'}, {'ヘ'}}}, + {[][]rune{{'ふ'}, {'フ'}, {'フ'}}}, + {[][]rune{{'ひ'}, {'ヒ'}, {'ヒ'}}}, + {[][]rune{{'は'}, {'ハ'}, {'ハ'}, {'八'}}}, + {[][]rune{{'の'}, {'ノ'}, {'ノ'}}}, + {[][]rune{{'ね'}, {'ネ'}, {'ネ'}}}, + {[][]rune{{'ぬ'}, {'ヌ'}, {'ヌ'}}}, + {[][]rune{{'に'}, {'ニ'}, {'ニ'}, {'二'}}}, + {[][]rune{{'な'}, {'ナ'}, {'ナ'}}}, + {[][]rune{{'と'}, {'ト'}, {'ト'}, {'┣'}, {'├'}}}, + {[][]rune{{'て'}, {'テ'}, {'テ'}, {'〒'}, {'乙'}}}, + {[][]rune{{'つ'}, {'ツ'}, {'ツ'}, {'っ'}, {'ッ'}, {'ッ'}}}, + {[][]rune{{'ち'}, {'チ'}, {'チ'}, {'千'}}}, + {[][]rune{{'た'}, {'タ'}, {'タ'}, {'夕'}}}, + {[][]rune{{'そ'}, {'ソ'}, {'ソ'}}}, + {[][]rune{{'せ'}, {'セ'}, {'セ'}}}, + {[][]rune{{'す'}, {'ス'}, {'ス'}}}, + {[][]rune{{'し'}, {'シ'}, {'シ'}}}, + {[][]rune{{'さ'}, {'サ'}, {'サ'}}}, + {[][]rune{{'こ'}, {'コ'}, {'コ'}}}, + {[][]rune{{'け'}, {'ケ'}, {'ケ'}, {'ヶ'}}}, + {[][]rune{{'く'}, {'ク'}, {'ク'}}}, + {[][]rune{{'き'}, {'キ'}, {'キ'}}}, + {[][]rune{{'か'}, {'カ'}, {'カ'}, {'ヵ'}, {'力'}}}, + {[][]rune{{'お'}, {'オ'}, {'オ'}, {'ォ'}, {'ぉ'}, {'ォ'}}}, + {[][]rune{{'え'}, {'エ'}, {'エ'}, {'ェ'}, {'ぇ'}, {'ェ'}, {'工'}}}, + {[][]rune{{'う'}, {'ウ'}, {'ウ'}, {'ゥ'}, {'ぅ'}, {'ゥ'}}}, + {[][]rune{{'い'}, {'イ'}, {'イ'}, {'ィ'}, {'ぃ'}, {'ィ'}}}, + {[][]rune{{'あ'}, {'ア'}, {'ァ'}, {'ア'}, {'ぁ'}, {'ァ'}}}, + {[][]rune{{'ー'}, {'―'}, {'‐'}, {'-'}, {'-'}, {'ー'}, {'一'}}}, + {[][]rune{{'9'}, {'9'}}}, + {[][]rune{{'8'}, {'8'}}}, + {[][]rune{{'7'}, {'7'}}}, + {[][]rune{{'6'}, {'6'}}}, + {[][]rune{{'5'}, {'5'}}}, + {[][]rune{{'4'}, {'4'}}}, + {[][]rune{{'3'}, {'3'}}}, + {[][]rune{{'2'}, {'2'}}}, + {[][]rune{{'1'}, {'1'}}}, + {[][]rune{{'ぽ'}, {'ポ'}, {'ホ', '゚'}, {'ほ', '゚'}, {'ホ', '゚'}, {'ホ', '°'}, {'ほ', '°'}, {'ホ', '°'}}}, + {[][]rune{{'ぺ'}, {'ペ'}, {'ヘ', '゚'}, {'へ', '゚'}, {'ヘ', '゚'}, {'ヘ', '°'}, {'へ', '°'}, {'ヘ', '°'}}}, + {[][]rune{{'ぷ'}, {'プ'}, {'フ', '゚'}, {'ふ', '゚'}, {'フ', '゚'}, {'フ', '°'}, {'ふ', '°'}, {'フ', '°'}}}, + {[][]rune{{'ぴ'}, {'ピ'}, {'ヒ', '゚'}, {'ひ', '゚'}, {'ヒ', '゚'}, {'ヒ', '°'}, {'ひ', '°'}, {'ヒ', '°'}}}, + {[][]rune{{'ぱ'}, {'パ'}, {'ハ', '゚'}, {'は', '゚'}, {'ハ', '゚'}, {'ハ', '°'}, {'は', '°'}, {'ハ', '°'}, {'八', '゚'}, {'八', '゜'}}}, + {[][]rune{{'z'}, {'z'}, {'Z'}, {'Z'}, {'Ζ'}}}, + {[][]rune{{'y'}, {'y'}, {'Y'}, {'Y'}, {'Υ'}, {'У'}, {'у'}}}, + {[][]rune{{'x'}, {'x'}, {'X'}, {'X'}, {'Χ'}, {'χ'}, {'Х'}, {'×'}, {'х'}}}, + {[][]rune{{'w'}, {'w'}, {'W'}, {'W'}, {'ω'}, {'Ш'}, {'ш'}, {'щ'}}}, + {[][]rune{{'v'}, {'v'}, {'V'}, {'V'}, {'ν'}, {'υ'}}}, + {[][]rune{{'u'}, {'u'}, {'U'}, {'U'}, {'μ'}, {'∪'}}}, + {[][]rune{{'t'}, {'t'}, {'T'}, {'T'}, {'Τ'}, {'τ'}, {'Т'}, {'т'}}}, + {[][]rune{{'s'}, {'s'}, {'S'}, {'S'}, {'∫'}, {'$'}, {'$'}}}, + {[][]rune{{'r'}, {'r'}, {'R'}, {'R'}, {'Я'}, {'я'}}}, + {[][]rune{{'q'}, {'q'}, {'Q'}, {'Q'}}}, + {[][]rune{{'p'}, {'p'}, {'P'}, {'P'}, {'Ρ'}, {'ρ'}, {'Р'}, {'р'}}}, + {[][]rune{{'o'}, {'o'}, {'O'}, {'O'}, {'○'}, {'Ο'}, {'ο'}, {'О'}, {'о'}, {'◯'}, {'〇'}, {'0'}, {'0'}}}, + {[][]rune{{'n'}, {'n'}, {'N'}, {'N'}, {'Ν'}, {'η'}, {'ン'}, {'ん'}, {'ン'}}}, + {[][]rune{{'m'}, {'m'}, {'M'}, {'M'}, {'Μ'}, {'М'}, {'м'}}}, + {[][]rune{{'l'}, {'l'}, {'L'}, {'L'}, {'|'}}}, + {[][]rune{{'k'}, {'k'}, {'K'}, {'K'}, {'Κ'}, {'κ'}, {'К'}, {'к'}}}, + {[][]rune{{'j'}, {'j'}, {'J'}, {'J'}}}, + {[][]rune{{'i'}, {'i'}, {'I'}, {'I'}, {'Ι'}}}, + {[][]rune{{'h'}, {'h'}, {'H'}, {'H'}, {'Η'}, {'Н'}, {'н'}}}, + {[][]rune{{'f'}, {'f'}, {'F'}, {'F'}}}, + {[][]rune{{'g'}, {'g'}, {'G'}, {'G'}}}, + {[][]rune{{'e'}, {'e'}, {'E'}, {'E'}, {'Ε'}, {'ε'}, {'Е'}, {'Ё'}, {'е'}, {'ё'}, {'∈'}}}, + {[][]rune{{'d'}, {'d'}, {'D'}, {'D'}}}, + {[][]rune{{'c'}, {'c'}, {'C'}, {'С'}, {'с'}, {'C'}, {'℃'}}}, + {[][]rune{{'b'}, {'B'}, {'b'}, {'B'}, {'β'}, {'Β'}, {'В'}, {'в'}, {'ъ'}, {'ь'}, {'♭'}}}, + {[][]rune{{'\''}, {'’'}}}, + {[][]rune{{'a'}, {'A'}, {'a'}, {'A'}, {'α'}, {'@'}, {'@'}, {'а'}, {'Å'}, {'А'}, {'Α'}}}, + {[][]rune{{'"'}, {'”'}}}, + {[][]rune{{'%'}, {'%'}}}, + } + for _, smcGroup := range smcData { + for _, smcPair := range smcGroup.charGroup { + smc.WriteUint16(stringsupport.ToNGWord(string(smcPair[0]))[0]) + if len(smcPair) > 1 { + smc.WriteUint16(stringsupport.ToNGWord(string(smcPair[1]))[0]) + } else { + smc.WriteUint16(0) + } + } + smc.WriteUint32(0) + } + filters.WriteUint32(uint32(len(smc.Data()))) filters.WriteBytes(smc.Data()) From ca38f5671dbc4943d8449ccdca4af18ef9338be3 Mon Sep 17 00:00:00 2001 From: wish Date: Tue, 16 Jul 2024 01:12:02 +1000 Subject: [PATCH 08/15] ascii working, sjis not working --- server/signserver/dsgn_resp.go | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/server/signserver/dsgn_resp.go b/server/signserver/dsgn_resp.go index 3066dc3d6..06e58994a 100644 --- a/server/signserver/dsgn_resp.go +++ b/server/signserver/dsgn_resp.go @@ -287,7 +287,16 @@ func (s *Session) makeSignResponse(uid uint32) []byte { nam.WriteUint32(uint32(len(parts))) for _, part := range parts { nam.WriteUint16(part) - nam.WriteInt16(-1) // TODO: figure out how this value relates to corresponding SMC part + var i int16 + j := int16(-1) + for _, smcGroup := range smcData { + if rune(part) == smcGroup.charGroup[0][0] { + j = i + break + } + i += int16(len(smcGroup.charGroup) + 1) + } + nam.WriteInt16(j) } nam.WriteUint16(0) nam.WriteInt16(-1) From 5de6570510ca3810a9787c7ab89f7b81ea5acbf0 Mon Sep 17 00:00:00 2001 From: wish Date: Tue, 16 Jul 2024 01:13:17 +1000 Subject: [PATCH 09/15] ascii working, sjis not working --- server/signserver/dsgn_resp.go | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/server/signserver/dsgn_resp.go b/server/signserver/dsgn_resp.go index 06e58994a..84bb0fa56 100644 --- a/server/signserver/dsgn_resp.go +++ b/server/signserver/dsgn_resp.go @@ -312,7 +312,16 @@ func (s *Session) makeSignResponse(uid uint32) []byte { msg.WriteUint32(uint32(len(parts))) for _, part := range parts { msg.WriteUint16(part) - msg.WriteInt16(-1) + var i int16 + j := int16(-1) + for _, smcGroup := range smcData { + if rune(part) == smcGroup.charGroup[0][0] { + j = i + break + } + i += int16(len(smcGroup.charGroup) + 1) + } + msg.WriteInt16(j) } msg.WriteUint16(0) msg.WriteInt16(-1) From aa5d95e7c55c84661605f0a3e6f4bcb4c4f545f7 Mon Sep 17 00:00:00 2001 From: wish Date: Mon, 22 Jul 2024 23:44:53 +1000 Subject: [PATCH 10/15] fix sjis ngwords --- server/signserver/dsgn_resp.go | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/server/signserver/dsgn_resp.go b/server/signserver/dsgn_resp.go index 84bb0fa56..3d102d52c 100644 --- a/server/signserver/dsgn_resp.go +++ b/server/signserver/dsgn_resp.go @@ -136,8 +136,8 @@ func (s *Session) makeSignResponse(uid uint32) []byte { bf.WriteUint32(s.server.getLastCID(uid)) bf.WriteUint32(s.server.getUserRights(uid)) - namNGWords := []string{"test", "痴女", "てすと"} - msgNGWords := []string{"test", "痴女", "てすと"} + namNGWords := []string{} + msgNGWords := []string{} filters := byteframe.NewByteFrame() filters.SetLE() @@ -290,7 +290,7 @@ func (s *Session) makeSignResponse(uid uint32) []byte { var i int16 j := int16(-1) for _, smcGroup := range smcData { - if rune(part) == smcGroup.charGroup[0][0] { + if rune(part) == rune(stringsupport.ToNGWord(string(smcGroup.charGroup[0][0]))[0]) { j = i break } @@ -315,7 +315,7 @@ func (s *Session) makeSignResponse(uid uint32) []byte { var i int16 j := int16(-1) for _, smcGroup := range smcData { - if rune(part) == smcGroup.charGroup[0][0] { + if rune(part) == rune(stringsupport.ToNGWord(string(smcGroup.charGroup[0][0]))[0]) { j = i break } From b755de269e388bbda9b0b10f0c505b02c6d0d657 Mon Sep 17 00:00:00 2001 From: wish Date: Tue, 23 Jul 2024 00:11:54 +1000 Subject: [PATCH 11/15] add retro stamp rewards --- server/channelserver/handlers.go | 26 ++++++++++++++++++++++++++ 1 file changed, 26 insertions(+) diff --git a/server/channelserver/handlers.go b/server/channelserver/handlers.go index d301ad6c9..ed9308904 100644 --- a/server/channelserver/handlers.go +++ b/server/channelserver/handlers.go @@ -1051,6 +1051,32 @@ func handleMsgMhfUpdateEtcPoint(s *Session, p mhfpacket.MHFPacket) { func handleMsgMhfStampcardStamp(s *Session, p mhfpacket.MHFPacket) { pkt := p.(*mhfpacket.MsgMhfStampcardStamp) + + rewards := []struct { + HR uint16 + Item1 uint16 + Quantity1 uint16 + Item2 uint16 + Quantity2 uint16 + }{ + {0, 6164, 1, 6164, 2}, + {50, 6164, 2, 6164, 3}, + {100, 6164, 3, 5392, 1}, + {300, 5392, 1, 5392, 3}, + {999, 5392, 1, 5392, 4}, + } + if _config.ErupeConfig.RealClientMode <= _config.Z1 { + for _, reward := range rewards { + if pkt.HR >= reward.HR { + pkt.Item1 = reward.Item1 + pkt.Quantity1 = reward.Quantity1 + pkt.Item2 = reward.Item2 + pkt.Quantity2 = reward.Quantity2 + break + } + } + } + bf := byteframe.NewByteFrame() bf.WriteUint16(pkt.HR) var stamps uint16 From d29b7d00fc8c90ca9cd62bfad2ba8e9634bb837e Mon Sep 17 00:00:00 2001 From: wish Date: Tue, 23 Jul 2024 21:26:43 +1000 Subject: [PATCH 12/15] fix retro stamp rewards --- server/channelserver/handlers.go | 1 - 1 file changed, 1 deletion(-) diff --git a/server/channelserver/handlers.go b/server/channelserver/handlers.go index ed9308904..814518576 100644 --- a/server/channelserver/handlers.go +++ b/server/channelserver/handlers.go @@ -1072,7 +1072,6 @@ func handleMsgMhfStampcardStamp(s *Session, p mhfpacket.MHFPacket) { pkt.Quantity1 = reward.Quantity1 pkt.Item2 = reward.Item2 pkt.Quantity2 = reward.Quantity2 - break } } } From 717d7853422ae331a7dc94ba4f16e35c29b4e614 Mon Sep 17 00:00:00 2001 From: wish Date: Tue, 23 Jul 2024 21:56:01 +1000 Subject: [PATCH 13/15] fix possible warehouse error --- server/channelserver/handlers_house.go | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/server/channelserver/handlers_house.go b/server/channelserver/handlers_house.go index 5e47d0436..c91660b54 100644 --- a/server/channelserver/handlers_house.go +++ b/server/channelserver/handlers_house.go @@ -367,13 +367,17 @@ func handleMsgMhfAcquireTitle(s *Session, p mhfpacket.MHFPacket) { func handleMsgMhfResetTitle(s *Session, p mhfpacket.MHFPacket) {} -func handleMsgMhfOperateWarehouse(s *Session, p mhfpacket.MHFPacket) { - pkt := p.(*mhfpacket.MsgMhfOperateWarehouse) +func initializeWarehouse(s *Session) { var t int err := s.server.db.QueryRow("SELECT character_id FROM warehouse WHERE character_id=$1", s.charID).Scan(&t) if err != nil { s.server.db.Exec("INSERT INTO warehouse (character_id) VALUES ($1)", s.charID) } +} + +func handleMsgMhfOperateWarehouse(s *Session, p mhfpacket.MHFPacket) { + pkt := p.(*mhfpacket.MsgMhfOperateWarehouse) + initializeWarehouse(s) bf := byteframe.NewByteFrame() bf.WriteUint8(pkt.Operation) switch pkt.Operation { @@ -446,6 +450,7 @@ func addWarehouseEquipment(s *Session, equipment mhfitem.MHFEquipment) { } func warehouseGetItems(s *Session, index uint8) []mhfitem.MHFItemStack { + initializeWarehouse(s) var data []byte var items []mhfitem.MHFItemStack s.server.db.QueryRow(fmt.Sprintf(`SELECT item%d FROM warehouse WHERE character_id=$1`, index), s.charID).Scan(&data) From f545576fc9ad0b9480d1b396f567ede1767c8038 Mon Sep 17 00:00:00 2001 From: wish Date: Wed, 24 Jul 2024 23:33:04 +1000 Subject: [PATCH 14/15] merge changes --- server/channelserver/handlers.go | 42 ++------------------------------ 1 file changed, 2 insertions(+), 40 deletions(-) diff --git a/server/channelserver/handlers.go b/server/channelserver/handlers.go index 52ce7ed7c..cf182dfb5 100644 --- a/server/channelserver/handlers.go +++ b/server/channelserver/handlers.go @@ -1049,42 +1049,6 @@ func handleMsgMhfUpdateEtcPoint(s *Session, p mhfpacket.MHFPacket) { doAckSimpleSucceed(s, pkt.AckHandle, make([]byte, 4)) } -func getStampcardReward(secondStamp bool, HR uint16, GR uint16) mhfitem.MHFItemStack { - if GR > 0 { - if secondStamp { - return mhfitem.MHFItemStack{Item: mhfitem.MHFItem{ItemID: 5392}, Quantity: 4} - } else { - return mhfitem.MHFItemStack{Item: mhfitem.MHFItem{ItemID: 5392}, Quantity: 1} - } - } else { - if HR >= 300 { - if secondStamp { - return mhfitem.MHFItemStack{Item: mhfitem.MHFItem{ItemID: 5392}, Quantity: 3} - } else { - return mhfitem.MHFItemStack{Item: mhfitem.MHFItem{ItemID: 5392}, Quantity: 1} - } - } else if HR >= 100 { - if secondStamp { - return mhfitem.MHFItemStack{Item: mhfitem.MHFItem{ItemID: 5392}, Quantity: 1} - } else { - return mhfitem.MHFItemStack{Item: mhfitem.MHFItem{ItemID: 6164}, Quantity: 3} - } - } else if HR >= 50 { - if secondStamp { - return mhfitem.MHFItemStack{Item: mhfitem.MHFItem{ItemID: 6164}, Quantity: 3} - } else { - return mhfitem.MHFItemStack{Item: mhfitem.MHFItem{ItemID: 6164}, Quantity: 2} - } - } else { - if secondStamp { - return mhfitem.MHFItemStack{Item: mhfitem.MHFItem{ItemID: 6164}, Quantity: 2} - } else { - return mhfitem.MHFItemStack{Item: mhfitem.MHFItem{ItemID: 6164}, Quantity: 1} - } - } - } -} - func handleMsgMhfStampcardStamp(s *Session, p mhfpacket.MHFPacket) { pkt := p.(*mhfpacket.MsgMhfStampcardStamp) @@ -1127,21 +1091,19 @@ func handleMsgMhfStampcardStamp(s *Session, p mhfpacket.MHFPacket) { rewardTier = 2 if _config.ErupeConfig.RealClientMode < _config.Z2 { rewardUnk = 10 - reward = getStampcardReward(true, pkt.HR, pkt.GR) } else { rewardUnk = pkt.Reward2 - reward = mhfitem.MHFItemStack{Item: mhfitem.MHFItem{ItemID: pkt.Item2}, Quantity: pkt.Quantity2} } + reward = mhfitem.MHFItemStack{Item: mhfitem.MHFItem{ItemID: pkt.Item2}, Quantity: pkt.Quantity2} addWarehouseItem(s, reward) } else if stamps/15 > (stamps-pkt.Stamps)/15 { rewardTier = 1 if _config.ErupeConfig.RealClientMode < _config.Z2 { rewardUnk = 10 - reward = getStampcardReward(false, pkt.HR, pkt.GR) } else { rewardUnk = pkt.Reward1 - reward = mhfitem.MHFItemStack{Item: mhfitem.MHFItem{ItemID: pkt.Item1}, Quantity: pkt.Quantity1} } + reward = mhfitem.MHFItemStack{Item: mhfitem.MHFItem{ItemID: pkt.Item1}, Quantity: pkt.Quantity1} addWarehouseItem(s, reward) } From 459f382dd75ff481a81016aa983acc9349975448 Mon Sep 17 00:00:00 2001 From: wish Date: Wed, 24 Jul 2024 23:41:05 +1000 Subject: [PATCH 15/15] simplify --- network/mhfpacket/msg_mhf_stampcard_stamp.go | 3 +++ server/channelserver/handlers.go | 12 ++---------- 2 files changed, 5 insertions(+), 10 deletions(-) diff --git a/network/mhfpacket/msg_mhf_stampcard_stamp.go b/network/mhfpacket/msg_mhf_stampcard_stamp.go index 521e42221..281134c9d 100644 --- a/network/mhfpacket/msg_mhf_stampcard_stamp.go +++ b/network/mhfpacket/msg_mhf_stampcard_stamp.go @@ -44,6 +44,9 @@ func (m *MsgMhfStampcardStamp) Parse(bf *byteframe.ByteFrame, ctx *clientctx.Cli m.Item2 = uint16(bf.ReadUint32()) m.Quantity1 = uint16(bf.ReadUint32()) m.Quantity2 = uint16(bf.ReadUint32()) + } else { + m.Reward1 = 10 + m.Reward2 = 10 } return nil } diff --git a/server/channelserver/handlers.go b/server/channelserver/handlers.go index cf182dfb5..4f8e89e7c 100644 --- a/server/channelserver/handlers.go +++ b/server/channelserver/handlers.go @@ -1089,20 +1089,12 @@ func handleMsgMhfStampcardStamp(s *Session, p mhfpacket.MHFPacket) { if stamps/30 > (stamps-pkt.Stamps)/30 { rewardTier = 2 - if _config.ErupeConfig.RealClientMode < _config.Z2 { - rewardUnk = 10 - } else { - rewardUnk = pkt.Reward2 - } + rewardUnk = pkt.Reward2 reward = mhfitem.MHFItemStack{Item: mhfitem.MHFItem{ItemID: pkt.Item2}, Quantity: pkt.Quantity2} addWarehouseItem(s, reward) } else if stamps/15 > (stamps-pkt.Stamps)/15 { rewardTier = 1 - if _config.ErupeConfig.RealClientMode < _config.Z2 { - rewardUnk = 10 - } else { - rewardUnk = pkt.Reward1 - } + rewardUnk = pkt.Reward1 reward = mhfitem.MHFItemStack{Item: mhfitem.MHFItem{ItemID: pkt.Item1}, Quantity: pkt.Quantity1} addWarehouseItem(s, reward) }