mirror of
https://github.com/Mezeporta/Erupe.git
synced 2025-12-12 23:14:36 +01:00
145 lines
4.3 KiB
Go
145 lines
4.3 KiB
Go
package channelserver
|
|
|
|
import (
|
|
"erupe-ce/common/byteframe"
|
|
"erupe-ce/common/stringsupport"
|
|
"erupe-ce/network/mhfpacket"
|
|
"fmt"
|
|
)
|
|
|
|
func handleMsgMhfPostGuildScout(s *Session, p mhfpacket.MHFPacket) {
|
|
pkt := p.(*mhfpacket.MsgMhfPostGuildScout)
|
|
|
|
guild := GetGuildInfoByCharacterId(s, s.charID)
|
|
if guild.ID == 0 {
|
|
doAckSimpleFail(s, pkt.AckHandle, make([]byte, 4))
|
|
return
|
|
}
|
|
|
|
s.server.db.Exec(`INSERT INTO guild_invites (guild_id, character_id, actor_id) VALUES ($1, $2, $3)`, s.charID, pkt.CharID, guild.ID)
|
|
|
|
mail := &Mail{
|
|
SenderID: s.charID,
|
|
RecipientID: pkt.CharID,
|
|
Subject: s.server.i18n.guild.invite.title,
|
|
Body: fmt.Sprintf(
|
|
s.server.i18n.guild.invite.body,
|
|
guild.Name,
|
|
),
|
|
IsGuildInvite: true,
|
|
}
|
|
|
|
mail.Send(s)
|
|
doAckBufSucceed(s, pkt.AckHandle, make([]byte, 4))
|
|
}
|
|
|
|
func handleMsgMhfCancelGuildScout(s *Session, p mhfpacket.MHFPacket) {
|
|
pkt := p.(*mhfpacket.MsgMhfCancelGuildScout)
|
|
s.server.db.Exec(`DELETE FROM guild_invites WHERE id=$1`, pkt.InvitationID)
|
|
doAckBufSucceed(s, pkt.AckHandle, make([]byte, 4))
|
|
}
|
|
|
|
func handleMsgMhfAnswerGuildScout(s *Session, p mhfpacket.MHFPacket) {
|
|
pkt := p.(*mhfpacket.MsgMhfAnswerGuildScout)
|
|
|
|
guild := GetGuildInfoByCharacterId(s, pkt.LeaderID)
|
|
if guild.ID == 0 {
|
|
doAckSimpleFail(s, pkt.AckHandle, make([]byte, 4))
|
|
return
|
|
}
|
|
|
|
bf := byteframe.NewByteFrame()
|
|
var mail []Mail
|
|
var err error
|
|
if pkt.Answer {
|
|
err = guild.AcceptApplication(s, s.charID)
|
|
mail = append(mail, Mail{
|
|
RecipientID: s.charID,
|
|
Subject: s.server.i18n.guild.invite.success.title,
|
|
Body: fmt.Sprintf(s.server.i18n.guild.invite.success.body, guild.Name),
|
|
IsSystemMessage: true,
|
|
})
|
|
mail = append(mail, Mail{
|
|
SenderID: s.charID,
|
|
RecipientID: pkt.LeaderID,
|
|
Subject: s.server.i18n.guild.invite.accepted.title,
|
|
Body: fmt.Sprintf(s.server.i18n.guild.invite.accepted.body, guild.Name),
|
|
IsSystemMessage: true,
|
|
})
|
|
} else {
|
|
err = guild.RejectApplication(s, s.charID)
|
|
mail = append(mail, Mail{
|
|
RecipientID: s.charID,
|
|
Subject: s.server.i18n.guild.invite.rejected.title,
|
|
Body: fmt.Sprintf(s.server.i18n.guild.invite.rejected.body, guild.Name),
|
|
IsSystemMessage: true,
|
|
})
|
|
mail = append(mail, Mail{
|
|
SenderID: s.charID,
|
|
RecipientID: pkt.LeaderID,
|
|
Subject: s.server.i18n.guild.invite.declined.title,
|
|
Body: fmt.Sprintf(s.server.i18n.guild.invite.declined.body, guild.Name),
|
|
IsSystemMessage: true,
|
|
})
|
|
}
|
|
if err != nil {
|
|
bf.WriteUint32(7)
|
|
bf.WriteUint32(guild.ID)
|
|
doAckBufSucceed(s, pkt.AckHandle, bf.Data())
|
|
} else {
|
|
bf.WriteUint32(0)
|
|
bf.WriteUint32(guild.ID)
|
|
doAckBufSucceed(s, pkt.AckHandle, bf.Data())
|
|
for _, m := range mail {
|
|
m.Send(s)
|
|
}
|
|
}
|
|
}
|
|
|
|
func handleMsgMhfGetGuildScoutList(s *Session, p mhfpacket.MHFPacket) {
|
|
pkt := p.(*mhfpacket.MsgMhfGetGuildScoutList)
|
|
|
|
guild := GetGuildInfoByCharacterId(s, s.charID)
|
|
if guild.ID == 0 && s.prevGuildID == 0 {
|
|
doAckSimpleFail(s, pkt.AckHandle, make([]byte, 4))
|
|
return
|
|
} else {
|
|
guild = GetGuildInfoByID(s, s.prevGuildID)
|
|
if guild.ID == 0 {
|
|
doAckSimpleFail(s, pkt.AckHandle, make([]byte, 4))
|
|
return
|
|
}
|
|
}
|
|
|
|
invites := GetGuildInvites(s, guild.ID)
|
|
bf := byteframe.NewByteFrame()
|
|
bf.WriteUint32(uint32(len(invites)))
|
|
for _, invite := range invites {
|
|
bf.WriteUint32(invite.ID)
|
|
bf.WriteUint32(invite.ActorID)
|
|
bf.WriteUint32(invite.CharID)
|
|
bf.WriteUint32(uint32(invite.InvitedAt.Unix()))
|
|
bf.WriteUint16(invite.HR)
|
|
bf.WriteUint16(invite.GR)
|
|
bf.WriteBytes(stringsupport.PaddedString(invite.Name, 32, true))
|
|
}
|
|
doAckBufSucceed(s, pkt.AckHandle, bf.Data())
|
|
}
|
|
|
|
func handleMsgMhfGetRejectGuildScout(s *Session, p mhfpacket.MHFPacket) {
|
|
pkt := p.(*mhfpacket.MsgMhfGetRejectGuildScout)
|
|
var currentStatus bool
|
|
s.server.db.QueryRow(`SELECT restrict_guild_scout FROM characters WHERE id=$1`, s.charID).Scan(¤tStatus)
|
|
if currentStatus {
|
|
doAckSimpleSucceed(s, pkt.AckHandle, []byte{0x00, 0x00, 0x00, 0x01})
|
|
} else {
|
|
doAckSimpleSucceed(s, pkt.AckHandle, []byte{0x00, 0x00, 0x00, 0x00})
|
|
}
|
|
}
|
|
|
|
func handleMsgMhfSetRejectGuildScout(s *Session, p mhfpacket.MHFPacket) {
|
|
pkt := p.(*mhfpacket.MsgMhfSetRejectGuildScout)
|
|
s.server.db.Exec(`UPDATE characters SET restrict_guild_scout=$1 WHERE id=$2`, pkt.Reject, s.charID)
|
|
doAckSimpleSucceed(s, pkt.AckHandle, nil)
|
|
}
|