mirror of
https://github.com/Mezeporta/Erupe.git
synced 2025-12-14 16:04:38 +01:00
rewrite TransitMessage Find Party
This commit is contained in:
@@ -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++
|
||||||
|
|||||||
Reference in New Issue
Block a user