mirror of
https://github.com/Mezeporta/Erupe.git
synced 2026-02-05 17:47:05 +01:00
implement canned festa prizes
This commit is contained in:
147
Erupe/festa.sql
147
Erupe/festa.sql
@@ -33,6 +33,153 @@ CREATE TABLE IF NOT EXISTS public.festa_trials
|
|||||||
reward int NOT NULL
|
reward int NOT NULL
|
||||||
);
|
);
|
||||||
|
|
||||||
|
CREATE TYPE prize_type AS ENUM ('personal', 'guild');
|
||||||
|
|
||||||
|
CREATE TABLE IF NOT EXISTS public.festa_prizes
|
||||||
|
(
|
||||||
|
id serial NOT NULL PRIMARY KEY,
|
||||||
|
type prize_type NOT NULL,
|
||||||
|
tier int NOT NULL,
|
||||||
|
souls_req int NOT NULL,
|
||||||
|
item_id int NOT NULL,
|
||||||
|
num_item int NOT NULL
|
||||||
|
);
|
||||||
|
|
||||||
|
CREATE TABLE IF NOT EXISTS public.festa_prizes_accepted
|
||||||
|
(
|
||||||
|
prize_id int NOT NULL,
|
||||||
|
character_id int NOT NULL
|
||||||
|
);
|
||||||
|
|
||||||
|
-- Ripped prizes
|
||||||
|
INSERT INTO public.festa_prizes
|
||||||
|
(type, tier, souls_req, item_id, num_item)
|
||||||
|
VALUES
|
||||||
|
('personal', 1, 1, 9647, 7),
|
||||||
|
('personal', 2, 1, 9647, 7),
|
||||||
|
('personal', 3, 1, 9647, 7),
|
||||||
|
('personal', 1, 200, 11284, 4),
|
||||||
|
('personal', 2, 200, 11284, 4),
|
||||||
|
('personal', 3, 200, 11284, 4),
|
||||||
|
('personal', 1, 400, 11381, 3),
|
||||||
|
('personal', 2, 400, 11381, 3),
|
||||||
|
('personal', 3, 400, 11381, 3),
|
||||||
|
('personal', 1, 600, 11284, 8),
|
||||||
|
('personal', 2, 600, 11284, 8),
|
||||||
|
('personal', 3, 600, 11284, 8),
|
||||||
|
('personal', 1, 800, 11384, 3),
|
||||||
|
('personal', 2, 800, 11384, 3),
|
||||||
|
('personal', 3, 800, 11384, 3),
|
||||||
|
('personal', 1, 1000, 11284, 12),
|
||||||
|
('personal', 2, 1000, 11284, 12),
|
||||||
|
('personal', 3, 1000, 11284, 12),
|
||||||
|
('personal', 1, 1200, 11381, 5),
|
||||||
|
('personal', 2, 1200, 11381, 5),
|
||||||
|
('personal', 3, 1200, 11381, 5),
|
||||||
|
('personal', 1, 1400, 11284, 16),
|
||||||
|
('personal', 2, 1400, 11284, 16),
|
||||||
|
('personal', 3, 1400, 11284, 16),
|
||||||
|
('personal', 1, 1700, 11384, 5),
|
||||||
|
('personal', 2, 1700, 11384, 5),
|
||||||
|
('personal', 3, 1700, 11384, 5),
|
||||||
|
('personal', 1, 2000, 11284, 16),
|
||||||
|
('personal', 2, 2000, 11284, 16),
|
||||||
|
('personal', 3, 2000, 11284, 16),
|
||||||
|
('personal', 1, 2500, 11382, 4),
|
||||||
|
('personal', 2, 2500, 11382, 4),
|
||||||
|
('personal', 3, 2500, 11382, 4),
|
||||||
|
('personal', 1, 3000, 11284, 24),
|
||||||
|
('personal', 2, 3000, 11284, 24),
|
||||||
|
('personal', 3, 3000, 11284, 24),
|
||||||
|
('personal', 1, 4000, 11385, 4),
|
||||||
|
('personal', 2, 4000, 11385, 4),
|
||||||
|
('personal', 3, 4000, 11385, 4),
|
||||||
|
('personal', 1, 5000, 11381, 11),
|
||||||
|
('personal', 2, 5000, 11381, 11),
|
||||||
|
('personal', 3, 5000, 11381, 11),
|
||||||
|
('personal', 1, 6000, 5177, 5),
|
||||||
|
('personal', 2, 6000, 5177, 5),
|
||||||
|
('personal', 3, 6000, 5177, 5),
|
||||||
|
('personal', 1, 7000, 11384, 11),
|
||||||
|
('personal', 2, 7000, 11384, 11),
|
||||||
|
('personal', 3, 7000, 11384, 11),
|
||||||
|
('personal', 1, 10000, 11382, 8),
|
||||||
|
('personal', 2, 10000, 11382, 8),
|
||||||
|
('personal', 3, 10000, 11382, 8),
|
||||||
|
('personal', 1, 15000, 11385, 4),
|
||||||
|
('personal', 2, 15000, 11385, 4),
|
||||||
|
('personal', 3, 15000, 11385, 4),
|
||||||
|
('personal', 1, 20000, 11381, 13),
|
||||||
|
('personal', 2, 20000, 11381, 13),
|
||||||
|
('personal', 3, 20000, 11381, 13),
|
||||||
|
('personal', 1, 25000, 11385, 4),
|
||||||
|
('personal', 2, 25000, 11385, 4),
|
||||||
|
('personal', 3, 25000, 11385, 4),
|
||||||
|
('personal', 1, 30000, 11383, 1),
|
||||||
|
('personal', 2, 30000, 11383, 1),
|
||||||
|
('personal', 3, 30000, 11383, 1);
|
||||||
|
|
||||||
|
INSERT INTO public.festa_prizes
|
||||||
|
(type, tier, souls_req, item_id, num_item)
|
||||||
|
VALUES
|
||||||
|
('guild', 1, 100, 7468, 5),
|
||||||
|
('guild', 2, 100, 7468, 5),
|
||||||
|
('guild', 3, 100, 7465, 5),
|
||||||
|
('guild', 1, 300, 7469, 5),
|
||||||
|
('guild', 2, 300, 7469, 5),
|
||||||
|
('guild', 3, 300, 7466, 5),
|
||||||
|
('guild', 1, 700, 7470, 5),
|
||||||
|
('guild', 2, 700, 7470, 5),
|
||||||
|
('guild', 3, 700, 7467, 5),
|
||||||
|
('guild', 1, 1500, 13405, 14),
|
||||||
|
('guild', 1, 1500, 1520, 3),
|
||||||
|
('guild', 2, 1500, 13405, 14),
|
||||||
|
('guild', 2, 1500, 1520, 3),
|
||||||
|
('guild', 3, 1500, 7011, 3),
|
||||||
|
('guild', 3, 1500, 13405, 14),
|
||||||
|
('guild', 1, 3000, 10201, 10),
|
||||||
|
('guild', 2, 3000, 10201, 10),
|
||||||
|
('guild', 3, 3000, 10201, 10),
|
||||||
|
('guild', 1, 6000, 13895, 14),
|
||||||
|
('guild', 1, 6000, 1520, 6),
|
||||||
|
('guild', 2, 6000, 13895, 14),
|
||||||
|
('guild', 2, 6000, 1520, 6),
|
||||||
|
('guild', 3, 6000, 13895, 14),
|
||||||
|
('guild', 3, 6000, 7011, 4),
|
||||||
|
('guild', 1, 12000, 13406, 14),
|
||||||
|
('guild', 1, 12000, 1520, 9),
|
||||||
|
('guild', 2, 12000, 13406, 14),
|
||||||
|
('guild', 2, 12000, 1520, 9),
|
||||||
|
('guild', 3, 12000, 13406, 14),
|
||||||
|
('guild', 3, 12000, 7011, 5),
|
||||||
|
('guild', 1, 25000, 10207, 10),
|
||||||
|
('guild', 2, 25000, 10207, 10),
|
||||||
|
('guild', 3, 25000, 10207, 10),
|
||||||
|
('guild', 1, 50000, 1520, 12),
|
||||||
|
('guild', 1, 50000, 13896, 14),
|
||||||
|
('guild', 2, 50000, 1520, 12),
|
||||||
|
('guild', 2, 50000, 13896, 14),
|
||||||
|
('guild', 3, 50000, 7011, 6),
|
||||||
|
('guild', 3, 50000, 13896, 14),
|
||||||
|
('guild', 1, 100000, 10201, 10),
|
||||||
|
('guild', 2, 100000, 10201, 10),
|
||||||
|
('guild', 3, 100000, 10201, 10),
|
||||||
|
('guild', 1, 200000, 13406, 16),
|
||||||
|
('guild', 2, 200000, 13406, 16),
|
||||||
|
('guild', 3, 200000, 13406, 16),
|
||||||
|
('guild', 1, 300000, 13896, 16),
|
||||||
|
('guild', 2, 300000, 13896, 16),
|
||||||
|
('guild', 3, 300000, 13896, 16),
|
||||||
|
('guild', 1, 400000, 10207, 10),
|
||||||
|
('guild', 2, 400000, 10207, 10),
|
||||||
|
('guild', 3, 400000, 10207, 10),
|
||||||
|
('guild', 1, 500000, 13407, 6),
|
||||||
|
('guild', 1, 500000, 13897, 6),
|
||||||
|
('guild', 2, 500000, 13407, 6),
|
||||||
|
('guild', 2, 500000, 13897, 6),
|
||||||
|
('guild', 3, 500000, 13407, 6),
|
||||||
|
('guild', 3, 500000, 13897, 6);
|
||||||
|
|
||||||
-- Ripped trials
|
-- Ripped trials
|
||||||
INSERT INTO public.festa_trials
|
INSERT INTO public.festa_trials
|
||||||
(objective, goal_id, times_req, locale_req, reward)
|
(objective, goal_id, times_req, locale_req, reward)
|
||||||
|
|||||||
@@ -71,6 +71,7 @@ func handleMsgMhfEnumerateRanking(s *Session, p mhfpacket.MHFPacket) {
|
|||||||
func cleanupFesta(s *Session) {
|
func cleanupFesta(s *Session) {
|
||||||
s.server.db.Exec("DELETE FROM events WHERE event_type='festa'")
|
s.server.db.Exec("DELETE FROM events WHERE event_type='festa'")
|
||||||
s.server.db.Exec("DELETE FROM festa_registrations")
|
s.server.db.Exec("DELETE FROM festa_registrations")
|
||||||
|
s.server.db.Exec("DELETE FROM festa_prizes_accepted")
|
||||||
s.server.db.Exec("UPDATE guild_characters SET souls=0")
|
s.server.db.Exec("UPDATE guild_characters SET souls=0")
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -320,32 +321,73 @@ func handleMsgMhfAcquireFesta(s *Session, p mhfpacket.MHFPacket) {
|
|||||||
|
|
||||||
func handleMsgMhfAcquireFestaPersonalPrize(s *Session, p mhfpacket.MHFPacket) {
|
func handleMsgMhfAcquireFestaPersonalPrize(s *Session, p mhfpacket.MHFPacket) {
|
||||||
pkt := p.(*mhfpacket.MsgMhfAcquireFestaPersonalPrize)
|
pkt := p.(*mhfpacket.MsgMhfAcquireFestaPersonalPrize)
|
||||||
// Set prize as claimed
|
s.server.db.Exec("INSERT INTO public.festa_prizes_accepted VALUES ($1, $2)", pkt.PrizeID, s.charID)
|
||||||
doAckSimpleSucceed(s, pkt.AckHandle, make([]byte, 4))
|
doAckSimpleSucceed(s, pkt.AckHandle, make([]byte, 4))
|
||||||
}
|
}
|
||||||
|
|
||||||
func handleMsgMhfAcquireFestaIntermediatePrize(s *Session, p mhfpacket.MHFPacket) {
|
func handleMsgMhfAcquireFestaIntermediatePrize(s *Session, p mhfpacket.MHFPacket) {
|
||||||
pkt := p.(*mhfpacket.MsgMhfAcquireFestaIntermediatePrize)
|
pkt := p.(*mhfpacket.MsgMhfAcquireFestaIntermediatePrize)
|
||||||
// Set prize as claimed
|
s.server.db.Exec("INSERT INTO public.festa_prizes_accepted VALUES ($1, $2)", pkt.PrizeID, s.charID)
|
||||||
doAckSimpleSucceed(s, pkt.AckHandle, make([]byte, 4))
|
doAckSimpleSucceed(s, pkt.AckHandle, make([]byte, 4))
|
||||||
}
|
}
|
||||||
|
|
||||||
// uint32 numPrizes
|
type Prize struct {
|
||||||
// struct festaPrize
|
ID uint32 `db:"id"`
|
||||||
// uint32 prizeID
|
Tier uint32 `db:"tier"`
|
||||||
// uint32 prizeTier (1/2/3, 3 = GR)
|
SoulsReq uint32 `db:"souls_req"`
|
||||||
// uint32 soulsReq
|
ItemID uint32 `db:"item_id"`
|
||||||
// uint32 unk (00 00 00 07)
|
NumItem uint32 `db:"num_item"`
|
||||||
// uint32 itemID
|
Claimed int `db:"claimed"`
|
||||||
// uint32 numItem
|
}
|
||||||
// bool claimed
|
|
||||||
|
|
||||||
func handleMsgMhfEnumerateFestaPersonalPrize(s *Session, p mhfpacket.MHFPacket) {
|
func handleMsgMhfEnumerateFestaPersonalPrize(s *Session, p mhfpacket.MHFPacket) {
|
||||||
pkt := p.(*mhfpacket.MsgMhfEnumerateFestaPersonalPrize)
|
pkt := p.(*mhfpacket.MsgMhfEnumerateFestaPersonalPrize)
|
||||||
doAckBufSucceed(s, pkt.AckHandle, make([]byte, 4))
|
rows, _ := s.server.db.Queryx("SELECT id, tier, souls_req, item_id, num_item, (SELECT count(*) FROM festa_prizes_accepted fpa WHERE fp.id = fpa.prize_id AND fpa.character_id = 4) AS claimed FROM festa_prizes fp WHERE type='personal'")
|
||||||
|
var count uint32
|
||||||
|
prizeData := byteframe.NewByteFrame()
|
||||||
|
for rows.Next() {
|
||||||
|
prize := &Prize{}
|
||||||
|
err := rows.StructScan(&prize)
|
||||||
|
if err != nil {
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
count++
|
||||||
|
prizeData.WriteUint32(prize.ID)
|
||||||
|
prizeData.WriteUint32(prize.Tier)
|
||||||
|
prizeData.WriteUint32(prize.SoulsReq)
|
||||||
|
prizeData.WriteUint32(7) // Unk
|
||||||
|
prizeData.WriteUint32(prize.ItemID)
|
||||||
|
prizeData.WriteUint32(prize.NumItem)
|
||||||
|
prizeData.WriteBool(prize.Claimed > 0)
|
||||||
|
}
|
||||||
|
bf := byteframe.NewByteFrame()
|
||||||
|
bf.WriteUint32(count)
|
||||||
|
bf.WriteBytes(prizeData.Data())
|
||||||
|
doAckBufSucceed(s, pkt.AckHandle, bf.Data())
|
||||||
}
|
}
|
||||||
|
|
||||||
func handleMsgMhfEnumerateFestaIntermediatePrize(s *Session, p mhfpacket.MHFPacket) {
|
func handleMsgMhfEnumerateFestaIntermediatePrize(s *Session, p mhfpacket.MHFPacket) {
|
||||||
pkt := p.(*mhfpacket.MsgMhfEnumerateFestaIntermediatePrize)
|
pkt := p.(*mhfpacket.MsgMhfEnumerateFestaIntermediatePrize)
|
||||||
doAckBufSucceed(s, pkt.AckHandle, make([]byte, 4))
|
rows, _ := s.server.db.Queryx("SELECT id, tier, souls_req, item_id, num_item, (SELECT count(*) FROM festa_prizes_accepted fpa WHERE fp.id = fpa.prize_id AND fpa.character_id = 4) AS claimed FROM festa_prizes fp WHERE type='guild'")
|
||||||
|
var count uint32
|
||||||
|
prizeData := byteframe.NewByteFrame()
|
||||||
|
for rows.Next() {
|
||||||
|
prize := &Prize{}
|
||||||
|
err := rows.StructScan(&prize)
|
||||||
|
if err != nil {
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
count++
|
||||||
|
prizeData.WriteUint32(prize.ID)
|
||||||
|
prizeData.WriteUint32(prize.Tier)
|
||||||
|
prizeData.WriteUint32(prize.SoulsReq)
|
||||||
|
prizeData.WriteUint32(7) // Unk
|
||||||
|
prizeData.WriteUint32(prize.ItemID)
|
||||||
|
prizeData.WriteUint32(prize.NumItem)
|
||||||
|
prizeData.WriteBool(prize.Claimed > 0)
|
||||||
|
}
|
||||||
|
bf := byteframe.NewByteFrame()
|
||||||
|
bf.WriteUint32(count)
|
||||||
|
bf.WriteBytes(prizeData.Data())
|
||||||
|
doAckBufSucceed(s, pkt.AckHandle, bf.Data())
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user