Added some conquest packets and caplink paths

This commit is contained in:
stratic-dev
2024-07-01 16:16:57 +01:00
parent 163444950c
commit 5f665e4262
10 changed files with 474 additions and 68 deletions

View File

@@ -1097,7 +1097,8 @@ func handleMsgMhfGetEarthStatus(s *Session, p mhfpacket.MHFPacket) {
bf.WriteInt32(s.server.erupeConfig.EarthStatus)
bf.WriteInt32(s.server.erupeConfig.EarthID)
for i, m := range s.server.erupeConfig.EarthMonsters {
if _config.ErupeConfig.RealClientMode <= _config.G9 {
//Changed from G9 to G8 to get conquest working in g9.1
if _config.ErupeConfig.RealClientMode <= _config.G8 {
if i == 3 {
break
}

View File

@@ -96,7 +96,9 @@ func handleMsgMhfGetRyoudama(s *Session, p mhfpacket.MHFPacket) {
func handleMsgMhfPostRyoudama(s *Session, p mhfpacket.MHFPacket) {}
func handleMsgMhfGetTinyBin(s *Session, p mhfpacket.MHFPacket) {
//Works for Tower but not Conquest
//Conquest: Unk0 0 Unk1 2 Unk2 1
type TinyBinItem struct {
ItemId uint16
Amount uint8

View File

@@ -2,20 +2,77 @@ package channelserver
import (
"erupe-ce/common/byteframe"
"erupe-ce/common/stringsupport"
"erupe-ce/network/mhfpacket"
)
func handleMsgMhfGetBreakSeibatuLevelReward(s *Session, p mhfpacket.MHFPacket) {
pkt := p.(*mhfpacket.MsgMhfGetBreakSeibatuLevelReward)
bf := byteframe.NewByteFrame()
bf.WriteInt32(0)
bf.WriteInt32(0)
bf.WriteInt32(0)
bf.WriteInt32(0)
doAckBufSucceed(s, pkt.AckHandle, bf.Data())
type BreakSeibatuLevelReward struct {
Item int32
Value int32
Level int32
Unk int32
}
type WeeklySeibatuRankingReward struct {
func handleMsgMhfGetBreakSeibatuLevelReward(s *Session, p mhfpacket.MHFPacket) {
pkt := p.(*mhfpacket.MsgMhfGetBreakSeibatuLevelReward)
var data []*byteframe.ByteFrame
var weeklySeibatuRankingRewards []BreakSeibatuLevelReward
switch pkt.EarthMonster {
case 116:
weeklySeibatuRankingRewards = []BreakSeibatuLevelReward{
{8, 3, 2, 0},
{8, 3, 2, 0},
{8, 3, 2, 0},
{8, 3, 3, 0},
{8, 3, 3, 0},
{8, 3, 3, 0},
{8, 3, 3, 0}}
case 107:
weeklySeibatuRankingRewards = []BreakSeibatuLevelReward{
{4, 3, 1, 0},
{4, 3, 2, 0},
{4, 3, 3, 0},
{4, 3, 4, 0},
{4, 3, 5, 0}}
case 2:
weeklySeibatuRankingRewards = []BreakSeibatuLevelReward{
{5, 3, 1, 0},
{5, 3, 2, 0},
{5, 3, 3, 0},
{5, 3, 4, 0},
{5, 3, 5, 0}}
case 36:
weeklySeibatuRankingRewards = []BreakSeibatuLevelReward{
{7, 3, 1, 0},
{7, 3, 2, 0},
{7, 3, 3, 0},
{7, 3, 4, 0},
{7, 3, 5, 0}}
default:
weeklySeibatuRankingRewards = []BreakSeibatuLevelReward{
{1, 3, 1, 0},
{1, 3, 2, 0},
{1, 3, 3, 0},
{1, 3, 4, 0},
{1, 3, 5, 0}}
}
for _, seibatuData := range weeklySeibatuRankingRewards {
bf := byteframe.NewByteFrame()
bf.WriteInt32(seibatuData.Item) // Item
bf.WriteInt32(seibatuData.Value) // Value
bf.WriteInt32(seibatuData.Level) //Level
bf.WriteInt32(seibatuData.Unk)
data = append(data, bf)
}
doAckEarthSucceed(s, pkt.AckHandle, data)
}
type WeeklySeibatuRankingReward0 struct {
Index0 int32 //Place Start
Index1 int32 //Place Finish
Index2 uint32 // UNK
@@ -23,14 +80,236 @@ type WeeklySeibatuRankingReward struct {
ID int32 //ID
Value int32 // Value
}
type WeeklySeibatuRankingReward1 struct {
Unk0 int32
ID int32
Amount uint32
PlaceFrom int32
PlaceTo int32
}
func handleMsgMhfGetWeeklySeibatuRankingReward(s *Session, p mhfpacket.MHFPacket) {
pkt := p.(*mhfpacket.MsgMhfGetWeeklySeibatuRankingReward)
var data []*byteframe.ByteFrame
var weeklySeibatuRankingRewards []WeeklySeibatuRankingReward
var weeklySeibatuRankingRewards []WeeklySeibatuRankingReward0
var weeklySeibatuRankingRewardsWeird []WeeklySeibatuRankingReward1
switch pkt.Operation {
case 1:
switch pkt.ID { // Seems to align with EarthStatus 1 and 2
case 1:
switch pkt.EarthMonster {
case 116:
weeklySeibatuRankingRewardsWeird = []WeeklySeibatuRankingReward1{
{0, 2, 3, 1, 100},
{0, 2, 6, 1, 100},
{0, 2, 6, 1, 100},
{0, 2, 6, 1, 100},
{0, 2, 15, 1, 100},
{0, 2, 15, 1, 100},
{0, 2, 25, 1, 100},
{0, 2, 2, 101, 1000},
{0, 2, 4, 101, 1000},
{0, 2, 4, 101, 1000},
{0, 2, 4, 101, 1000},
{0, 2, 9, 101, 1000},
{0, 2, 9, 101, 1000},
{0, 2, 30, 101, 1000},
{0, 2, 2, 1000, 1001},
{0, 2, 4, 1000, 1001},
{0, 2, 4, 1000, 1001},
{0, 2, 4, 1000, 1001},
{0, 2, 6, 1000, 1001},
{0, 2, 6, 1000, 1001},
}
case 107:
weeklySeibatuRankingRewardsWeird = []WeeklySeibatuRankingReward1{
{0, 2, 3, 1, 100},
{0, 2, 6, 1, 100},
{0, 2, 6, 1, 100},
{0, 2, 6, 1, 100},
{0, 2, 15, 1, 100},
{0, 2, 15, 1, 100},
{0, 2, 25, 1, 100},
{0, 2, 2, 101, 1000},
{0, 2, 4, 101, 1000},
{0, 2, 4, 101, 1000},
{0, 2, 4, 101, 1000},
{0, 2, 9, 101, 1000},
{0, 2, 9, 101, 1000},
{0, 2, 30, 101, 1000},
{0, 2, 2, 1000, 1001},
{0, 2, 4, 1000, 1001},
{0, 2, 4, 1000, 1001},
{0, 2, 4, 1000, 1001},
{0, 2, 6, 1000, 1001},
{0, 2, 6, 1000, 1001},
}
case 2:
weeklySeibatuRankingRewardsWeird = []WeeklySeibatuRankingReward1{
{0, 2, 3, 1, 100},
{0, 2, 6, 1, 100},
{0, 2, 6, 1, 100},
{0, 2, 6, 1, 100},
{0, 2, 15, 1, 100},
{0, 2, 15, 1, 100},
{0, 2, 25, 1, 100},
{0, 2, 2, 101, 1000},
{0, 2, 4, 101, 1000},
{0, 2, 4, 101, 1000},
{0, 2, 4, 101, 1000},
{0, 2, 9, 101, 1000},
{0, 2, 9, 101, 1000},
{0, 2, 30, 101, 1000},
{0, 2, 2, 1000, 1001},
{0, 2, 4, 1000, 1001},
{0, 2, 4, 1000, 1001},
{0, 2, 4, 1000, 1001},
{0, 2, 6, 1000, 1001},
{0, 2, 6, 1000, 1001},
}
case 36:
weeklySeibatuRankingRewardsWeird = []WeeklySeibatuRankingReward1{
{0, 2, 3, 1, 100},
{0, 2, 6, 1, 100},
{0, 2, 6, 1, 100},
{0, 2, 6, 1, 100},
{0, 2, 15, 1, 100},
{0, 2, 15, 1, 100},
{0, 2, 25, 1, 100},
{0, 2, 2, 101, 1000},
{0, 2, 4, 101, 1000},
{0, 2, 4, 101, 1000},
{0, 2, 4, 101, 1000},
{0, 2, 9, 101, 1000},
{0, 2, 9, 101, 1000},
{0, 2, 30, 101, 1000},
{0, 2, 2, 1000, 1001},
{0, 2, 4, 1000, 1001},
{0, 2, 4, 1000, 1001},
{0, 2, 4, 1000, 1001},
{0, 2, 6, 1000, 1001},
{0, 2, 6, 1000, 1001},
}
}
//Conquest
case 2:
switch pkt.EarthMonster {
case 116:
weeklySeibatuRankingRewardsWeird = []WeeklySeibatuRankingReward1{
{0, 2, 3, 1, 100},
{0, 2, 6, 1, 100},
{0, 2, 6, 1, 100},
{0, 2, 6, 1, 100},
{0, 2, 15, 1, 100},
{0, 2, 15, 1, 100},
{0, 2, 25, 1, 100},
{0, 2, 2, 101, 1000},
{0, 2, 4, 101, 1000},
{0, 2, 4, 101, 1000},
{0, 2, 4, 101, 1000},
{0, 2, 9, 101, 1000},
{0, 2, 9, 101, 1000},
{0, 2, 30, 101, 1000},
{0, 2, 2, 1000, 1001},
{0, 2, 4, 1000, 1001},
{0, 2, 4, 1000, 1001},
{0, 2, 4, 1000, 1001},
{0, 2, 6, 1000, 1001},
{0, 2, 6, 1000, 1001},
}
case 107:
weeklySeibatuRankingRewardsWeird = []WeeklySeibatuRankingReward1{
{0, 2, 3, 1, 100},
{0, 2, 6, 1, 100},
{0, 2, 6, 1, 100},
{0, 2, 6, 1, 100},
{0, 2, 15, 1, 100},
{0, 2, 15, 1, 100},
{0, 2, 25, 1, 100},
{0, 2, 2, 101, 1000},
{0, 2, 4, 101, 1000},
{0, 2, 4, 101, 1000},
{0, 2, 4, 101, 1000},
{0, 2, 9, 101, 1000},
{0, 2, 9, 101, 1000},
{0, 2, 30, 101, 1000},
{0, 2, 2, 1000, 1001},
{0, 2, 4, 1000, 1001},
{0, 2, 4, 1000, 1001},
{0, 2, 4, 1000, 1001},
{0, 2, 6, 1000, 1001},
{0, 2, 6, 1000, 1001},
}
case 2:
weeklySeibatuRankingRewardsWeird = []WeeklySeibatuRankingReward1{
{0, 2, 3, 1, 100},
{0, 2, 6, 1, 100},
{0, 2, 6, 1, 100},
{0, 2, 6, 1, 100},
{0, 2, 15, 1, 100},
{0, 2, 15, 1, 100},
{0, 2, 25, 1, 100},
{0, 2, 2, 101, 1000},
{0, 2, 4, 101, 1000},
{0, 2, 4, 101, 1000},
{0, 2, 4, 101, 1000},
{0, 2, 9, 101, 1000},
{0, 2, 9, 101, 1000},
{0, 2, 30, 101, 1000},
{0, 2, 2, 1000, 1001},
{0, 2, 4, 1000, 1001},
{0, 2, 4, 1000, 1001},
{0, 2, 4, 1000, 1001},
{0, 2, 6, 1000, 1001},
{0, 2, 6, 1000, 1001},
}
case 36:
weeklySeibatuRankingRewardsWeird = []WeeklySeibatuRankingReward1{
{0, 2, 3, 1, 100},
{0, 2, 6, 1, 100},
{0, 2, 6, 1, 100},
{0, 2, 6, 1, 100},
{0, 2, 15, 1, 100},
{0, 2, 15, 1, 100},
{0, 2, 25, 1, 100},
{0, 2, 2, 101, 1000},
{0, 2, 4, 101, 1000},
{0, 2, 4, 101, 1000},
{0, 2, 4, 101, 1000},
{0, 2, 9, 101, 1000},
{0, 2, 9, 101, 1000},
{0, 2, 30, 101, 1000},
{0, 2, 2, 1000, 1001},
{0, 2, 4, 1000, 1001},
{0, 2, 4, 1000, 1001},
{0, 2, 4, 1000, 1001},
{0, 2, 6, 1000, 1001},
{0, 2, 6, 1000, 1001},
}
}
//Conquest
}
case 3:
weeklySeibatuRankingRewards = []WeeklySeibatuRankingReward{
weeklySeibatuRankingRewards = []WeeklySeibatuRankingReward0{
//Unk0
//Unk1
@@ -72,24 +351,24 @@ func handleMsgMhfGetWeeklySeibatuRankingReward(s *Session, p mhfpacket.MHFPacket
//243401 = Route 1
//I have a sneaky suspicion that the above massive array is feeding into this somehow....
case 240031:
weeklySeibatuRankingRewards = []WeeklySeibatuRankingReward{
weeklySeibatuRankingRewards = []WeeklySeibatuRankingReward0{
{1, 1, 1, 7201, 12068, 1}}
case 240041:
weeklySeibatuRankingRewards = []WeeklySeibatuRankingReward{
weeklySeibatuRankingRewards = []WeeklySeibatuRankingReward0{
{0, 0, 1, 7201, 12068, 1}}
case 240042:
weeklySeibatuRankingRewards = []WeeklySeibatuRankingReward{
weeklySeibatuRankingRewards = []WeeklySeibatuRankingReward0{
{0, 0, 2, 7201, 12068, 1}}
case 240051:
weeklySeibatuRankingRewards = []WeeklySeibatuRankingReward{
weeklySeibatuRankingRewards = []WeeklySeibatuRankingReward0{
{0, 0, 1, 7201, 12068, 1}}
case 240052:
weeklySeibatuRankingRewards = []WeeklySeibatuRankingReward{
weeklySeibatuRankingRewards = []WeeklySeibatuRankingReward0{
{1, 1, 1, 7201, 12068, 1},
}
//Tower 260001 260003
case 260001:
weeklySeibatuRankingRewards = []WeeklySeibatuRankingReward{
weeklySeibatuRankingRewards = []WeeklySeibatuRankingReward0{
//Can only have 10 in each dist (It disapears otherwise)
//{unk,unk,dist,seiabtuType,ItemID,Value}
@@ -138,7 +417,7 @@ func handleMsgMhfGetWeeklySeibatuRankingReward(s *Session, p mhfpacket.MHFPacket
{0, 0, 4, 7201, 12077, 1},
}
case 260003:
weeklySeibatuRankingRewards = []WeeklySeibatuRankingReward{
weeklySeibatuRankingRewards = []WeeklySeibatuRankingReward0{
//Adjust Floors done in database to make blue ?? Possible value here for dist
//{Floor,unk,unk,seiabtuType,ItemID,Value}
@@ -165,7 +444,7 @@ func handleMsgMhfGetWeeklySeibatuRankingReward(s *Session, p mhfpacket.MHFPacket
{18, 0, 0, 7201, 12073, 1},
}
default: //Covers all Pallone Requests... for now
weeklySeibatuRankingRewards = []WeeklySeibatuRankingReward{
weeklySeibatuRankingRewards = []WeeklySeibatuRankingReward0{
// To do figure out values 3-5 its some sort of item structure
//1st
{1, 0, 0, 7202, 10, 10000},
@@ -186,25 +465,117 @@ func handleMsgMhfGetWeeklySeibatuRankingReward(s *Session, p mhfpacket.MHFPacket
}
}
for _, seibatuData := range weeklySeibatuRankingRewards {
bf := byteframe.NewByteFrame()
bf.WriteInt32(seibatuData.Index0)
bf.WriteInt32(seibatuData.Index1)
bf.WriteUint32(seibatuData.Index2)
bf.WriteInt32(seibatuData.Type)
bf.WriteInt32(seibatuData.ID)
bf.WriteInt32(seibatuData.Value)
data = append(data, bf)
if pkt.Operation == 1 {
for _, seibatuData := range weeklySeibatuRankingRewardsWeird {
bf := byteframe.NewByteFrame()
bf.WriteInt32(seibatuData.Unk0)
bf.WriteInt32(seibatuData.ID)
bf.WriteUint32(seibatuData.Amount)
bf.WriteInt32(seibatuData.PlaceFrom)
bf.WriteInt32(seibatuData.PlaceTo)
data = append(data, bf)
}
} else {
for _, seibatuData := range weeklySeibatuRankingRewards {
bf := byteframe.NewByteFrame()
bf.WriteInt32(seibatuData.Index0)
bf.WriteInt32(seibatuData.Index1)
bf.WriteUint32(seibatuData.Index2)
bf.WriteInt32(seibatuData.Type)
bf.WriteInt32(seibatuData.ID)
bf.WriteInt32(seibatuData.Value)
data = append(data, bf)
}
}
doAckEarthSucceed(s, pkt.AckHandle, data)
}
type FixedSeibatuRankingTable struct {
Rank int32
Level int32
UnkArray string
}
func handleMsgMhfGetFixedSeibatuRankingTable(s *Session, p mhfpacket.MHFPacket) {
pkt := p.(*mhfpacket.MsgMhfGetFixedSeibatuRankingTable)
var fixedSeibatuRankingTable []FixedSeibatuRankingTable
//Interestingly doesn't trigger the pkt on EarthStatus 1 But menu option is there is this Seibatu instead?
switch pkt.EarthMonster {
case 116:
fixedSeibatuRankingTable = []FixedSeibatuRankingTable{
{1, 1, "Hunter 1"},
{2, 1, "Hunter 2"},
{3, 1, "Hunter 3"},
{4, 1, "Hunter 4"},
{5, 1, "Hunter 5"},
{6, 1, "Hunter 6"},
{7, 1, "Hunter 7"},
{8, 1, "Hunter 8"},
{9, 1, "Hunter 9"},
}
case 107:
fixedSeibatuRankingTable = []FixedSeibatuRankingTable{
{1, 2, "Hunter 1"},
{2, 2, "Hunter 2"},
{3, 2, "Hunter 3"},
{4, 2, "Hunter 4"},
{5, 2, "Hunter 5"},
{6, 2, "Hunter 6"},
{7, 2, "Hunter 7"},
{8, 2, "Hunter 8"},
{9, 2, "Hunter 9"},
}
case 2:
fixedSeibatuRankingTable = []FixedSeibatuRankingTable{
{1, 3, "Hunter 1"},
{2, 3, "Hunter 2"},
{3, 3, "Hunter 3"},
{4, 3, "Hunter 4"},
{5, 3, "Hunter 5"},
{6, 3, "Hunter 6"},
{7, 3, "Hunter 7"},
{8, 3, "Hunter 8"},
{9, 3, "Hunter 9"},
}
case 36:
fixedSeibatuRankingTable = []FixedSeibatuRankingTable{
{1, 4, "Hunter 1"},
{2, 4, "Hunter 2"},
{3, 4, "Hunter 3"},
{4, 4, "Hunter 4"},
{5, 4, "Hunter 5"},
{6, 4, "Hunter 6"},
{7, 4, "Hunter 7"},
{8, 4, "Hunter 8"},
{9, 4, "Hunter 9"},
}
default:
fixedSeibatuRankingTable = []FixedSeibatuRankingTable{
{1, 1, "Hunter 1"},
{2, 1, "Hunter 2"},
{3, 1, "Hunter 3"},
{4, 1, "Hunter 4"},
{5, 1, "Hunter 5"},
{6, 1, "Hunter 6"},
{7, 1, "Hunter 7"},
{8, 1, "Hunter 8"},
{9, 1, "Hunter 9"},
}
}
bf := byteframe.NewByteFrame()
bf.WriteInt32(0)
bf.WriteInt32(0)
bf.WriteBytes(make([]byte, 32))
for _, seibatuData := range fixedSeibatuRankingTable {
bf.WriteInt32(seibatuData.Rank)
bf.WriteInt32(seibatuData.Level)
bf.WriteBytes(stringsupport.PaddedString(seibatuData.UnkArray, 32, true))
}
doAckBufSucceed(s, pkt.AckHandle, bf.Data())
}
@@ -216,22 +587,24 @@ func handleMsgMhfReadBeatLevel(s *Session, p mhfpacket.MHFPacket) {
resp := byteframe.NewByteFrame()
for i := 0; i < int(pkt.ValidIDCount); i++ {
resp.WriteUint32(pkt.IDs[i])
resp.WriteUint32(1)
resp.WriteUint32(1)
resp.WriteUint32(1)
resp.WriteUint32(0)
resp.WriteUint32(0)
resp.WriteUint32(0)
}
doAckBufSucceed(s, pkt.AckHandle, resp.Data())
}
func handleMsgMhfReadLastWeekBeatRanking(s *Session, p mhfpacket.MHFPacket) {
//Controls the monster headings for the other menus
pkt := p.(*mhfpacket.MsgMhfReadLastWeekBeatRanking)
bf := byteframe.NewByteFrame()
bf.WriteInt32(0)
bf.WriteInt32(0)
bf.WriteInt32(0)
bf.WriteInt32(0)
doAckBufSucceed(s, pkt.AckHandle, bf.Data())
resp := byteframe.NewByteFrame()
resp.WriteUint32(uint32(pkt.EarthMonster))
resp.WriteUint32(0)
resp.WriteUint32(0)
resp.WriteUint32(0)
doAckBufSucceed(s, pkt.AckHandle, resp.Data())
}
func handleMsgMhfUpdateBeatLevel(s *Session, p mhfpacket.MHFPacket) {