rewrite TransitMessage Find Party

This commit is contained in:
wish
2023-07-22 13:34:29 +10:00
parent 0b4dca5c45
commit c3ee5ef759

View File

@@ -6,6 +6,7 @@ import (
"erupe-ce/common/mhfcourse" "erupe-ce/common/mhfcourse"
ps "erupe-ce/common/pascalstring" ps "erupe-ce/common/pascalstring"
"erupe-ce/common/stringsupport" "erupe-ce/common/stringsupport"
_config "erupe-ce/config"
"fmt" "fmt"
"io" "io"
"net" "net"
@@ -447,48 +448,78 @@ func handleMsgMhfTransitMessage(s *Session, p mhfpacket.MHFPacket) {
} }
} }
case 4: // Find Party case 4: // Find Party
type FindPartyParams struct {
StagePrefix string
RankRestriction uint16
Targets []uint16
}
findPartyParams := FindPartyParams{}
bf := byteframe.NewByteFrameFromBytes(pkt.MessageData) bf := byteframe.NewByteFrameFromBytes(pkt.MessageData)
setting := bf.ReadUint8() numParams := int(bf.ReadUint8())
maxResults := bf.ReadUint16() maxResults := bf.ReadUint16()
bf.Seek(2, 1) for i := 0; i < numParams; i++ {
partyType := bf.ReadUint16() switch bf.ReadUint8() {
rankRestriction := uint16(0) case 0:
if setting >= 2 { values := int(bf.ReadUint8())
bf.Seek(2, 1) for i := 0; i < values; i++ {
rankRestriction = bf.ReadUint16() if _config.ErupeConfig.RealClientMode >= _config.Z1 {
} findPartyParams.RankRestriction = bf.ReadUint16()
targets := make([]uint16, 4) } else {
if setting >= 3 { findPartyParams.RankRestriction = uint16(bf.ReadInt8())
bf.Seek(1, 1) }
lenTargets := int(bf.ReadUint8()) }
for i := 0; i < lenTargets; i++ { case 1:
targets[i] = bf.ReadUint16() values := int(bf.ReadUint8())
for i := 0; i < values; i++ {
if _config.ErupeConfig.RealClientMode >= _config.Z1 {
findPartyParams.Targets = append(findPartyParams.Targets, bf.ReadUint16())
} else {
findPartyParams.Targets = append(findPartyParams.Targets, uint16(bf.ReadInt8()))
}
}
case 2:
values := int(bf.ReadUint8())
for i := 0; i < values; i++ {
var value int16
if _config.ErupeConfig.RealClientMode >= _config.Z1 {
value = bf.ReadInt16()
} else {
value = int16(bf.ReadInt8())
}
switch value {
case 0: // Public Bar
findPartyParams.StagePrefix = "sl2Ls210"
case 1: // Tokotoko Partnya
findPartyParams.StagePrefix = "sl2Ls463"
case 2: // Hunting Prowess Match
findPartyParams.StagePrefix = "sl2Ls286"
case 3: // Volpakkun Together
findPartyParams.StagePrefix = "sl2Ls465"
case 5: // Quick Party
// Unk
}
}
} }
} }
var stagePrefix string
switch partyType {
case 0: // Public Bar
stagePrefix = "sl2Ls210"
case 1: // Tokotoko Partnya
stagePrefix = "sl2Ls463"
case 2: // Hunting Prowess Match
stagePrefix = "sl2Ls286"
case 3: // Volpakkun Together
stagePrefix = "sl2Ls465"
case 5: // Quick Party
// Unk
}
for _, c := range s.server.Channels { for _, c := range s.server.Channels {
for _, stage := range c.stages { for _, stage := range c.stages {
if count == maxResults { if count == maxResults {
break break
} }
if strings.HasPrefix(stage.id, stagePrefix) { if strings.HasPrefix(stage.id, findPartyParams.StagePrefix) {
sb3 := byteframe.NewByteFrameFromBytes(stage.rawBinaryData[stageBinaryKey{1, 3}]) sb3 := byteframe.NewByteFrameFromBytes(stage.rawBinaryData[stageBinaryKey{1, 3}])
sb3.Seek(4, 0) sb3.Seek(4, 0)
stageRankRestriction := sb3.ReadUint16() stageRankRestriction := sb3.ReadUint16()
stageTarget := sb3.ReadUint16() stageTarget := sb3.ReadUint16()
if rankRestriction != 0xFFFF && stageRankRestriction < rankRestriction { if stageRankRestriction > findPartyParams.RankRestriction {
continue
}
if len(findPartyParams.Targets) > 0 {
for _, target := range findPartyParams.Targets {
if target == stageTarget {
break
}
}
continue continue
} }
count++ count++