From 91d95400219f28122009dd10c87dd91645d71320 Mon Sep 17 00:00:00 2001 From: wish Date: Sun, 12 Feb 2023 00:55:37 +1100 Subject: [PATCH] add event rp donation tracking --- patch-schema/guild-event-rp.sql | 5 +++++ server/channelserver/handlers_guild.go | 12 ++++++++---- server/channelserver/handlers_guild_member.go | 4 ++++ 3 files changed, 17 insertions(+), 4 deletions(-) create mode 100644 patch-schema/guild-event-rp.sql diff --git a/patch-schema/guild-event-rp.sql b/patch-schema/guild-event-rp.sql new file mode 100644 index 000000000..4801fd8f7 --- /dev/null +++ b/patch-schema/guild-event-rp.sql @@ -0,0 +1,5 @@ +BEGIN; + +ALTER TABLE IF EXISTS public.guild_characters ADD donated_rp INT DEFAULT 0; + +END; \ No newline at end of file diff --git a/server/channelserver/handlers_guild.go b/server/channelserver/handlers_guild.go index de54263ff..f4e5b1991 100644 --- a/server/channelserver/handlers_guild.go +++ b/server/channelserver/handlers_guild.go @@ -736,7 +736,10 @@ func handleMsgMhfOperateGuild(s *Session, p mhfpacket.MHFPacket) { // TODO: This doesn't implement blocking, if someone unlocked the same outfit at the same time s.server.db.Exec(`UPDATE guilds SET pugi_outfits=pugi_outfits+$1 WHERE id=$2`, int(math.Pow(float64(pkt.Data1.ReadUint32()), 2)), guild.ID) case mhfpacket.OPERATE_GUILD_DONATE_EVENT: - bf.WriteBytes(handleDonateRP(s, uint16(pkt.Data1.ReadUint32()), guild, true)) + quantity := uint16(pkt.Data1.ReadUint32()) + bf.WriteBytes(handleDonateRP(s, quantity, guild, true)) + // TODO: Move this value onto rp_yesterday and reset to 0... daily? + s.server.db.Exec(`UPDATE guild_characters SET rp_today=rp_today+$1 WHERE character_id=$2`, quantity, s.charID) case mhfpacket.OPERATE_GUILD_EVENT_EXCHANGE: rp := uint16(pkt.Data1.ReadUint32()) var balance uint32 @@ -782,7 +785,7 @@ func handleDonateRP(s *Session, amount uint16, guild *Guild, isEvent bool) []byt bf := byteframe.NewByteFrame() bf.WriteUint32(0) saveData, err := GetCharacterSaveData(s, s.charID) - if err != nil { + if err != nil || saveData == nil { return bf.Data() } saveData.RP -= amount @@ -1443,8 +1446,9 @@ func handleMsgMhfEnumerateGuildMember(s *Session, p mhfpacket.MHFPacket) { bf.WriteUint16(0) } - for range guildMembers { - bf.WriteUint32(0x00) // Unk + for _, member := range guildMembers { + bf.WriteUint16(member.RPToday) + bf.WriteUint16(member.RPYesterday) } doAckBufSucceed(s, pkt.AckHandle, bf.Data()) diff --git a/server/channelserver/handlers_guild_member.go b/server/channelserver/handlers_guild_member.go index 2c3f0cd1a..3f19d4b2e 100644 --- a/server/channelserver/handlers_guild_member.go +++ b/server/channelserver/handlers_guild_member.go @@ -13,6 +13,8 @@ type GuildMember struct { CharID uint32 `db:"character_id"` JoinedAt *time.Time `db:"joined_at"` Souls uint32 `db:"souls"` + RPToday uint16 `db:"rp_today"` + RPYesterday uint16 `db:"rp_yesterday"` Name string `db:"name"` IsApplicant bool `db:"is_applicant"` OrderIndex uint8 `db:"order_index"` @@ -63,6 +65,8 @@ SELECT g.id as guild_id, joined_at, coalesce(souls, 0) as souls, + rp_today, + rp_yesterday, c.name, character.character_id, coalesce(gc.order_index, 0) as order_index,