mirror of
https://github.com/Mezeporta/Erupe.git
synced 2025-12-15 00:15:08 +01:00
fix and structise InfoFesta
This commit is contained in:
@@ -1,7 +1,6 @@
|
|||||||
package channelserver
|
package channelserver
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"encoding/hex"
|
|
||||||
"erupe-ce/common/byteframe"
|
"erupe-ce/common/byteframe"
|
||||||
ps "erupe-ce/common/pascalstring"
|
ps "erupe-ce/common/pascalstring"
|
||||||
"erupe-ce/common/token"
|
"erupe-ce/common/token"
|
||||||
@@ -140,13 +139,26 @@ func generateFestaTimestamps(s *Session, start uint32, debug bool) []uint32 {
|
|||||||
return timestamps
|
return timestamps
|
||||||
}
|
}
|
||||||
|
|
||||||
type Trial struct {
|
type FestaTrial struct {
|
||||||
ID uint32 `db:"id"`
|
ID uint32 `db:"id"`
|
||||||
Objective uint8 `db:"objective"`
|
Objective uint16 `db:"objective"`
|
||||||
GoalID uint32 `db:"goal_id"`
|
GoalID uint32 `db:"goal_id"`
|
||||||
TimesReq uint16 `db:"times_req"`
|
TimesReq uint16 `db:"times_req"`
|
||||||
Locale uint16 `db:"locale_req"`
|
Locale uint16 `db:"locale_req"`
|
||||||
Reward uint16 `db:"reward"`
|
Reward uint16 `db:"reward"`
|
||||||
|
Monopoly uint16
|
||||||
|
Unk uint16
|
||||||
|
}
|
||||||
|
|
||||||
|
type FestaReward struct {
|
||||||
|
Unk0 uint8
|
||||||
|
Unk1 uint8
|
||||||
|
Unk2 uint16
|
||||||
|
Unk3 uint16
|
||||||
|
Unk4 uint16
|
||||||
|
Unk5 uint16
|
||||||
|
Unk6 uint16
|
||||||
|
Unk7 uint8
|
||||||
}
|
}
|
||||||
|
|
||||||
func handleMsgMhfInfoFesta(s *Session, p mhfpacket.MHFPacket) {
|
func handleMsgMhfInfoFesta(s *Session, p mhfpacket.MHFPacket) {
|
||||||
@@ -190,36 +202,70 @@ func handleMsgMhfInfoFesta(s *Session, p mhfpacket.MHFPacket) {
|
|||||||
bf.WriteUint32(blueSouls)
|
bf.WriteUint32(blueSouls)
|
||||||
bf.WriteUint32(redSouls)
|
bf.WriteUint32(redSouls)
|
||||||
|
|
||||||
|
var trials []FestaTrial
|
||||||
|
var trial FestaTrial
|
||||||
rows, _ = s.server.db.Queryx("SELECT * FROM festa_trials")
|
rows, _ = s.server.db.Queryx("SELECT * FROM festa_trials")
|
||||||
trialData := byteframe.NewByteFrame()
|
|
||||||
var count uint16
|
|
||||||
for rows.Next() {
|
for rows.Next() {
|
||||||
trial := &Trial{}
|
|
||||||
err := rows.StructScan(&trial)
|
err := rows.StructScan(&trial)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
count++
|
trials = append(trials, trial)
|
||||||
trialData.WriteUint32(trial.ID)
|
}
|
||||||
trialData.WriteUint8(0) // Unk
|
bf.WriteUint16(uint16(len(trials)))
|
||||||
trialData.WriteUint8(trial.Objective)
|
for _, trial := range trials {
|
||||||
trialData.WriteUint32(trial.GoalID)
|
bf.WriteUint32(trial.ID)
|
||||||
trialData.WriteUint16(trial.TimesReq)
|
bf.WriteUint16(trial.Objective)
|
||||||
trialData.WriteUint16(trial.Locale)
|
bf.WriteUint32(trial.GoalID)
|
||||||
trialData.WriteUint16(trial.Reward)
|
bf.WriteUint16(trial.TimesReq)
|
||||||
trialData.WriteUint8(0xFF) // Unk
|
bf.WriteUint16(trial.Locale)
|
||||||
trialData.WriteUint8(0xFF) // MonopolyState
|
bf.WriteUint16(trial.Reward)
|
||||||
trialData.WriteUint16(0) // Unk
|
trial.Monopoly = 0xFFFF // NYI
|
||||||
|
bf.WriteUint16(trial.Monopoly)
|
||||||
|
bf.WriteUint16(trial.Unk)
|
||||||
}
|
}
|
||||||
bf.WriteUint16(count)
|
|
||||||
bf.WriteBytes(trialData.Data())
|
|
||||||
|
|
||||||
// Static bonus rewards
|
rewards := []FestaReward{
|
||||||
rewards, _ := hex.DecodeString("001901000007015E05F000000000000100000703E81B6300000000010100000C03E8000000000000000100000D0000000000000000000100000100000000000000000002000007015E05F000000000000200000703E81B6300000000010200000C03E8000000000000000200000D0000000000000000000200000400000000000000000003000007015E05F000000000000300000703E81B6300000000010300000C03E8000000000000000300000D0000000000000000000300000100000000000000000004000007015E05F000000000000400000703E81B6300000000010400000C03E8000000000000000400000D0000000000000000000400000400000000000000000005000007015E05F000000000000500000703E81B6300000000010500000C03E8000000000000000500000D00000000000000000005000001000000000000000000")
|
{1, 0, 7, 350, 1520, 0, 0, 0},
|
||||||
bf.WriteBytes(rewards)
|
{1, 0, 7, 1000, 7011, 0, 0, 1},
|
||||||
|
{1, 0, 12, 1000, 0, 0, 0, 0},
|
||||||
|
{1, 0, 13, 0, 0, 0, 0, 0},
|
||||||
|
{1, 0, 1, 0, 0, 0, 0, 0},
|
||||||
|
{2, 0, 7, 350, 1520, 0, 0, 0},
|
||||||
|
{2, 0, 7, 1000, 7011, 0, 0, 1},
|
||||||
|
{2, 0, 12, 1000, 0, 0, 0, 0},
|
||||||
|
{2, 0, 13, 0, 0, 0, 0, 0},
|
||||||
|
{2, 0, 4, 0, 0, 0, 0, 0},
|
||||||
|
{3, 0, 7, 350, 1520, 0, 0, 0},
|
||||||
|
{3, 0, 7, 1000, 7011, 0, 0, 1},
|
||||||
|
{3, 0, 12, 1000, 0, 0, 0, 0},
|
||||||
|
{3, 0, 13, 0, 0, 0, 0, 0},
|
||||||
|
{3, 0, 1, 0, 0, 0, 0, 0},
|
||||||
|
{4, 0, 7, 350, 1520, 0, 0, 0},
|
||||||
|
{4, 0, 7, 1000, 7011, 0, 0, 1},
|
||||||
|
{4, 0, 12, 1000, 0, 0, 0, 0},
|
||||||
|
{4, 0, 13, 0, 0, 0, 0, 0},
|
||||||
|
{4, 0, 4, 0, 0, 0, 0, 0},
|
||||||
|
{5, 0, 7, 350, 1520, 0, 0, 0},
|
||||||
|
{5, 0, 7, 1000, 7011, 0, 0, 1},
|
||||||
|
{5, 0, 12, 1000, 0, 0, 0, 0},
|
||||||
|
{5, 0, 13, 0, 0, 0, 0, 0},
|
||||||
|
{5, 0, 1, 0, 0, 0, 0, 0},
|
||||||
|
}
|
||||||
|
bf.WriteUint16(uint16(len(rewards)))
|
||||||
|
for _, reward := range rewards {
|
||||||
|
bf.WriteUint8(reward.Unk0)
|
||||||
|
bf.WriteUint8(reward.Unk1)
|
||||||
|
bf.WriteUint16(reward.Unk2)
|
||||||
|
bf.WriteUint16(reward.Unk3)
|
||||||
|
bf.WriteUint16(reward.Unk4)
|
||||||
|
bf.WriteUint16(reward.Unk5)
|
||||||
|
bf.WriteUint16(reward.Unk6)
|
||||||
|
bf.WriteUint8(reward.Unk7)
|
||||||
|
}
|
||||||
|
|
||||||
bf.WriteUint16(0x0001)
|
bf.WriteUint32(120000)
|
||||||
bf.WriteUint32(0xD4C001F4)
|
bf.WriteUint16(500)
|
||||||
|
|
||||||
categoryWinners := uint16(0) // NYI
|
categoryWinners := uint16(0) // NYI
|
||||||
bf.WriteUint16(categoryWinners)
|
bf.WriteUint16(categoryWinners)
|
||||||
@@ -239,8 +285,18 @@ func handleMsgMhfInfoFesta(s *Session, p mhfpacket.MHFPacket) {
|
|||||||
ps.Uint8(bf, "", true) // Guild Name
|
ps.Uint8(bf, "", true) // Guild Name
|
||||||
}
|
}
|
||||||
|
|
||||||
d, _ := hex.DecodeString("000000000000000100001388000007D0000003E800000064012C00C8009600640032")
|
// Unknown values
|
||||||
bf.WriteBytes(d)
|
bf.WriteUint32(1)
|
||||||
|
bf.WriteUint32(5000)
|
||||||
|
bf.WriteUint32(2000)
|
||||||
|
bf.WriteUint32(1000)
|
||||||
|
bf.WriteUint32(100)
|
||||||
|
bf.WriteUint16(300)
|
||||||
|
bf.WriteUint16(200)
|
||||||
|
bf.WriteUint16(150)
|
||||||
|
bf.WriteUint16(100)
|
||||||
|
bf.WriteUint16(50)
|
||||||
|
|
||||||
ps.Uint16(bf, "", false)
|
ps.Uint16(bf, "", false)
|
||||||
doAckBufSucceed(s, pkt.AckHandle, bf.Data())
|
doAckBufSucceed(s, pkt.AckHandle, bf.Data())
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user