Merge pull request #133 from ZeruLight/main

This commit is contained in:
wish
2025-02-24 12:28:10 +11:00
committed by GitHub
2 changed files with 31 additions and 25 deletions

View File

@@ -1526,7 +1526,7 @@ func handleMsgMhfGetGuildManageRight(s *Session, p mhfpacket.MHFPacket) {
pkt := p.(*mhfpacket.MsgMhfGetGuildManageRight) pkt := p.(*mhfpacket.MsgMhfGetGuildManageRight)
guild, err := GetGuildInfoByCharacterId(s, s.charID) guild, err := GetGuildInfoByCharacterId(s, s.charID)
if guild == nil && s.prevGuildID != 0 { if guild == nil || s.prevGuildID != 0 {
guild, err = GetGuildInfoByID(s, s.prevGuildID) guild, err = GetGuildInfoByID(s, s.prevGuildID)
s.prevGuildID = 0 s.prevGuildID = 0
if guild == nil || err != nil { if guild == nil || err != nil {

View File

@@ -61,35 +61,41 @@ func (gm *GuildMember) Save(s *Session) error {
} }
const guildMembersSelectSQL = ` const guildMembersSelectSQL = `
SELECT * FROM ( SELECT
SELECT COALESCE(g.id, 0) AS guild_id,
g.id AS guild_id, joined_at,
joined_at, COALESCE((SELECT SUM(souls) FROM festa_submissions fs WHERE fs.character_id=c.id), 0) AS souls,
COALESCE((SELECT SUM(souls) FROM festa_submissions fs WHERE fs.character_id=c.id), 0) AS souls, COALESCE(rp_today, 0) AS rp_today,
COALESCE(rp_today, 0) AS rp_today, COALESCE(rp_yesterday, 0) AS rp_yesterday,
COALESCE(rp_yesterday, 0) AS rp_yesterday, c.name,
c.name, c.id AS character_id,
c.id AS character_id, COALESCE(order_index, 0) AS order_index,
COALESCE(order_index, 0) AS order_index, c.last_login,
c.last_login, COALESCE(recruiter, false) AS recruiter,
COALESCE(recruiter, false) AS recruiter, COALESCE(avoid_leadership, false) AS avoid_leadership,
COALESCE(avoid_leadership, false) AS avoid_leadership, c.hr,
c.hr, c.gr,
c.gr, c.weapon_id,
c.weapon_id, c.weapon_type,
c.weapon_type, CASE WHEN g.leader_id = c.id THEN true ELSE false END AS is_leader,
EXISTS(SELECT 1 FROM guild_applications ga WHERE ga.character_id=c.id AND application_type='applied') AS is_applicant, character.is_applicant
CASE WHEN g.leader_id = c.id THEN true ELSE false END AS is_leader FROM (
SELECT character_id, true as is_applicant, guild_id
FROM guild_applications ga
WHERE ga.application_type = 'applied'
UNION
SELECT character_id, false as is_applicant, guild_id
FROM guild_characters gc FROM guild_characters gc
LEFT JOIN characters c ON c.id = gc.character_id ) character
LEFT JOIN guilds g ON g.id = gc.guild_id JOIN characters c on character.character_id = c.id
) AS subquery LEFT JOIN guild_characters gc ON gc.character_id = character.character_id
LEFT JOIN guilds g ON g.id = gc.guild_id
` `
func GetGuildMembers(s *Session, guildID uint32, applicants bool) ([]*GuildMember, error) { func GetGuildMembers(s *Session, guildID uint32, applicants bool) ([]*GuildMember, error) {
rows, err := s.server.db.Queryx(fmt.Sprintf(` rows, err := s.server.db.Queryx(fmt.Sprintf(`
%s %s
WHERE guild_id = $1 AND is_applicant = $2 WHERE character.guild_id = $1 AND is_applicant = $2
`, guildMembersSelectSQL), guildID, applicants) `, guildMembersSelectSQL), guildID, applicants)
if err != nil { if err != nil {
@@ -115,7 +121,7 @@ func GetGuildMembers(s *Session, guildID uint32, applicants bool) ([]*GuildMembe
} }
func GetCharacterGuildData(s *Session, charID uint32) (*GuildMember, error) { func GetCharacterGuildData(s *Session, charID uint32) (*GuildMember, error) {
rows, err := s.server.db.Queryx(fmt.Sprintf("%s WHERE character_id=$1", guildMembersSelectSQL), charID) rows, err := s.server.db.Queryx(fmt.Sprintf("%s WHERE character.character_id=$1", guildMembersSelectSQL), charID)
if err != nil { if err != nil {
s.logger.Error(fmt.Sprintf("failed to retrieve membership data for character '%d'", charID)) s.logger.Error(fmt.Sprintf("failed to retrieve membership data for character '%d'", charID))