mirror of
https://github.com/Mezeporta/Erupe.git
synced 2025-12-13 07:25:03 +01:00
resolve conflicts
This commit is contained in:
41
patch-schema/achievements.sql
Normal file
41
patch-schema/achievements.sql
Normal 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;
|
||||
@@ -5,83 +5,74 @@ import (
|
||||
"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) {
|
||||
pkt := p.(*mhfpacket.MsgMhfGetAchievement)
|
||||
|
||||
achievementStruct := []struct {
|
||||
ID uint8 // Main ID
|
||||
Unk0 uint8 // always FF
|
||||
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},
|
||||
err := s.server.db.QueryRow("SELECT id FROM achievements WHERE id=$1", s.charID)
|
||||
if err != nil {
|
||||
s.server.db.Exec("INSERT INTO achievements (id) VALUES ($1)", s.charID)
|
||||
}
|
||||
|
||||
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.WriteUint8(uint8(len(achievementStruct))) // Entry count
|
||||
for _, entry := range achievementStruct {
|
||||
resp.WriteUint8(entry.ID)
|
||||
resp.WriteUint8(entry.Unk0)
|
||||
resp.WriteUint16(entry.Unk1)
|
||||
resp.WriteUint32(entry.Unk2)
|
||||
points := uint32(69)
|
||||
resp.WriteUint32(points)
|
||||
resp.WriteUint32(points)
|
||||
resp.WriteUint32(points)
|
||||
resp.WriteUint32(points)
|
||||
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())
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user