resolve conflicts

This commit is contained in:
wish
2022-08-07 21:04:47 +10:00
2 changed files with 104 additions and 72 deletions

View File

@@ -0,0 +1,41 @@
BEGIN;
CREATE TABLE IF NOT EXISTS public.achievements
(
id int NOT NULL,
ach0 int DEFAULT 0,
ach1 int DEFAULT 0,
ach2 int DEFAULT 0,
ach3 int DEFAULT 0,
ach4 int DEFAULT 0,
ach5 int DEFAULT 0,
ach6 int DEFAULT 0,
ach7 int DEFAULT 0,
ach8 int DEFAULT 0,
ach9 int DEFAULT 0,
ach10 int DEFAULT 0,
ach11 int DEFAULT 0,
ach12 int DEFAULT 0,
ach13 int DEFAULT 0,
ach14 int DEFAULT 0,
ach15 int DEFAULT 0,
ach16 int DEFAULT 0,
ach17 int DEFAULT 0,
ach18 int DEFAULT 0,
ach19 int DEFAULT 0,
ach20 int DEFAULT 0,
ach21 int DEFAULT 0,
ach22 int DEFAULT 0,
ach23 int DEFAULT 0,
ach24 int DEFAULT 0,
ach25 int DEFAULT 0,
ach26 int DEFAULT 0,
ach27 int DEFAULT 0,
ach28 int DEFAULT 0,
ach29 int DEFAULT 0,
ach30 int DEFAULT 0,
ach31 int DEFAULT 0,
ach32 int DEFAULT 0
);
END;

View File

@@ -5,83 +5,74 @@ import (
"erupe-ce/network/mhfpacket" "erupe-ce/network/mhfpacket"
) )
var achievementCurves = [][]uint32{
// 0: HR weapon use, Class use, Tore dailies
{5, 15, 30, 50, 100, 150, 200, 250, 300},
// 1: Weapon collector, G wep enhances
{1, 3, 5, 15, 30, 50, 75, 100, 150},
// 2: Festa wins
{1, 2, 3, 4, 5, 6, 7, 8, 9},
// 3: GR weapon use
{10, 50, 100, 200, 350, 500, 750, 1000, 1500},
// 4: Armor refinement
{0, 5, 5, 5, 5, 5, 5, 5, 5},
// 5: Sigil crafts
{0, 50, 50, 50, 50, 50, 50, 50, 50},
}
var achievementCurveMap = map[uint8][]uint32{
0: achievementCurves[0], 1: achievementCurves[0], 2: achievementCurves[0], 3: achievementCurves[0],
4: achievementCurves[0], 5: achievementCurves[0], 6: achievementCurves[0], 7: achievementCurves[1],
8: achievementCurves[2], 9: achievementCurves[0], 10: achievementCurves[0], 11: achievementCurves[0],
12: achievementCurves[0], 13: achievementCurves[0], 14: achievementCurves[0], 15: achievementCurves[0],
16: achievementCurves[3], 17: achievementCurves[3], 18: achievementCurves[3], 19: achievementCurves[3],
20: achievementCurves[3], 21: achievementCurves[3], 22: achievementCurves[3], 23: achievementCurves[3],
24: achievementCurves[3], 25: achievementCurves[3], 26: achievementCurves[3], 27: achievementCurves[1],
28: achievementCurves[4], 29: achievementCurves[5], 30: achievementCurves[3], 31: achievementCurves[3],
32: achievementCurves[3],
}
func handleMsgMhfGetAchievement(s *Session, p mhfpacket.MHFPacket) { func handleMsgMhfGetAchievement(s *Session, p mhfpacket.MHFPacket) {
pkt := p.(*mhfpacket.MsgMhfGetAchievement) pkt := p.(*mhfpacket.MsgMhfGetAchievement)
achievementStruct := []struct { err := s.server.db.QueryRow("SELECT id FROM achievements WHERE id=$1", s.charID)
ID uint8 // Main ID if err != nil {
Unk0 uint8 // always FF s.server.db.Exec("INSERT INTO achievements (id) VALUES ($1)", s.charID)
Unk1 uint16 // 0x05 0x00
Unk2 uint32 // 0x01 0x0A 0x05 0x00
}{
{ID: 0, Unk0: 0xFF, Unk1: 0, Unk2: 0},
{ID: 1, Unk0: 0xFF, Unk1: 0, Unk2: 0},
{ID: 2, Unk0: 0xFF, Unk1: 0, Unk2: 0},
{ID: 3, Unk0: 0xFF, Unk1: 0, Unk2: 0},
{ID: 4, Unk0: 0xFF, Unk1: 0, Unk2: 0},
{ID: 5, Unk0: 0xFF, Unk1: 0, Unk2: 0},
{ID: 6, Unk0: 0xFF, Unk1: 0, Unk2: 0},
{ID: 7, Unk0: 0xFF, Unk1: 0, Unk2: 0},
{ID: 8, Unk0: 0xFF, Unk1: 0, Unk2: 0},
{ID: 9, Unk0: 0xFF, Unk1: 0, Unk2: 0},
{ID: 10, Unk0: 0xFF, Unk1: 0, Unk2: 0},
{ID: 11, Unk0: 0xFF, Unk1: 0, Unk2: 0},
{ID: 12, Unk0: 0xFF, Unk1: 0, Unk2: 0},
{ID: 13, Unk0: 0xFF, Unk1: 0, Unk2: 0},
{ID: 14, Unk0: 0xFF, Unk1: 0, Unk2: 0},
{ID: 15, Unk0: 0xFF, Unk1: 0, Unk2: 0},
{ID: 16, Unk0: 0xFF, Unk1: 0, Unk2: 0},
{ID: 17, Unk0: 0xFF, Unk1: 0, Unk2: 0},
{ID: 18, Unk0: 0xFF, Unk1: 0, Unk2: 0},
{ID: 19, Unk0: 0xFF, Unk1: 0, Unk2: 0},
{ID: 20, Unk0: 0xFF, Unk1: 0, Unk2: 0},
{ID: 21, Unk0: 0xFF, Unk1: 0, Unk2: 0},
{ID: 22, Unk0: 0xFF, Unk1: 0, Unk2: 0},
{ID: 23, Unk0: 0xFF, Unk1: 0, Unk2: 0},
{ID: 24, Unk0: 0xFF, Unk1: 0, Unk2: 0},
{ID: 25, Unk0: 0xFF, Unk1: 0, Unk2: 0},
{ID: 26, Unk0: 0xFF, Unk1: 0, Unk2: 0},
{ID: 27, Unk0: 0xFF, Unk1: 0, Unk2: 0},
{ID: 28, Unk0: 0xFF, Unk1: 0, Unk2: 0},
{ID: 29, Unk0: 0xFF, Unk1: 0, Unk2: 0},
{ID: 30, Unk0: 0xFF, Unk1: 0, Unk2: 0},
{ID: 31, Unk0: 0xFF, Unk1: 0, Unk2: 0},
{ID: 32, Unk0: 0xFF, Unk1: 0, Unk2: 0},
{ID: 33, Unk0: 0xFF, Unk1: 0, Unk2: 0},
{ID: 34, Unk0: 0xFF, Unk1: 0, Unk2: 0},
{ID: 35, Unk0: 0xFF, Unk1: 0, Unk2: 0},
{ID: 36, Unk0: 0xFF, Unk1: 0, Unk2: 0},
{ID: 37, Unk0: 0xFF, Unk1: 0, Unk2: 0},
{ID: 38, Unk0: 0xFF, Unk1: 0, Unk2: 0},
{ID: 39, Unk0: 0xFF, Unk1: 0, Unk2: 0},
{ID: 40, Unk0: 0xFF, Unk1: 0, Unk2: 0},
{ID: 41, Unk0: 0xFF, Unk1: 0, Unk2: 0},
{ID: 42, Unk0: 0xFF, Unk1: 0, Unk2: 0},
{ID: 43, Unk0: 0xFF, Unk1: 0, Unk2: 0},
{ID: 44, Unk0: 0xFF, Unk1: 0, Unk2: 0},
{ID: 45, Unk0: 0xFF, Unk1: 0, Unk2: 0},
{ID: 46, Unk0: 0xFF, Unk1: 0, Unk2: 0},
{ID: 47, Unk0: 0xFF, Unk1: 0, Unk2: 0},
{ID: 48, Unk0: 0xFF, Unk1: 0, Unk2: 0},
{ID: 49, Unk0: 0xFF, Unk1: 0, Unk2: 0},
{ID: 50, Unk0: 0xFF, Unk1: 0, Unk2: 0},
{ID: 51, Unk0: 0xFF, Unk1: 0, Unk2: 0},
{ID: 52, Unk0: 0xFF, Unk1: 0, Unk2: 0},
{ID: 53, Unk0: 0xFF, Unk1: 0, Unk2: 0},
{ID: 54, Unk0: 0xFF, Unk1: 0, Unk2: 0},
{ID: 55, Unk0: 0xFF, Unk1: 0, Unk2: 0},
{ID: 56, Unk0: 0xFF, Unk1: 0, Unk2: 0},
{ID: 57, Unk0: 0xFF, Unk1: 0, Unk2: 0},
{ID: 58, Unk0: 0xFF, Unk1: 0, Unk2: 0},
{ID: 59, Unk0: 0xFF, Unk1: 0, Unk2: 0},
} }
scores := make([]int, 33)
s.server.db.QueryRow("SELECT * FROM achievements WHERE id=$1", s.charID).Scan(&scores[0], &scores[0],
&scores[1], &scores[2], &scores[3], &scores[4], &scores[5], &scores[6], &scores[7], &scores[8], &scores[9],
&scores[10], &scores[11], &scores[12], &scores[13], &scores[14], &scores[15], &scores[16], &scores[17],
&scores[18], &scores[19], &scores[20], &scores[21], &scores[22], &scores[23], &scores[24], &scores[25],
&scores[26], &scores[27], &scores[28], &scores[29], &scores[30], &scores[31], &scores[32])
resp := byteframe.NewByteFrame() resp := byteframe.NewByteFrame()
resp.WriteUint8(uint8(len(achievementStruct))) // Entry count points := uint32(69)
for _, entry := range achievementStruct { resp.WriteUint32(points)
resp.WriteUint8(entry.ID) resp.WriteUint32(points)
resp.WriteUint8(entry.Unk0) resp.WriteUint32(points)
resp.WriteUint16(entry.Unk1) resp.WriteUint32(points)
resp.WriteUint32(entry.Unk2) resp.WriteBytes([]byte{0x02, 0x00, 0x00})
entries := 34
resp.WriteUint8(uint8(entries)) // Entry count
for i := 0; i < entries; i++ {
resp.WriteUint8(uint8(i)) // achievement id
resp.WriteUint8(uint8(i)) // level
resp.WriteUint16(20) // point value
resp.WriteUint32(100) // required
resp.WriteUint8(0)
if i < 10 {
resp.WriteUint16(0x7FFF)
} else if i < 20 {
resp.WriteUint16(0x3FFF)
} else {
resp.WriteUint16(0x1FFF)
}
//resp.WriteUint16(0x7F7F) // unk
resp.WriteUint8(0)
resp.WriteUint32(100) // progress
} }
doAckBufSucceed(s, pkt.AckHandle, resp.Data()) doAckBufSucceed(s, pkt.AckHandle, resp.Data())
} }