mirror of
https://github.com/Mezeporta/Erupe.git
synced 2025-12-14 07:55:33 +01:00
clean up OperateGuild
This commit is contained in:
@@ -11,33 +11,33 @@ import (
|
|||||||
type OperateGuildAction uint8
|
type OperateGuildAction uint8
|
||||||
|
|
||||||
const (
|
const (
|
||||||
OPERATE_GUILD_DISBAND = 0x01
|
OperateGuildDisband = iota + 1
|
||||||
OPERATE_GUILD_APPLY = 0x02
|
OperateGuildApply
|
||||||
OPERATE_GUILD_LEAVE = 0x03
|
OperateGuildLeave
|
||||||
OPERATE_GUILD_RESIGN = 0x04
|
OperateGuildResign
|
||||||
OPERATE_GUILD_SET_APPLICATION_DENY = 0x05
|
OperateGuildSetApplicationDeny
|
||||||
OPERATE_GUILD_SET_APPLICATION_ALLOW = 0x06
|
OperateGuildSetApplicationAllow
|
||||||
OPERATE_GUILD_SET_AVOID_LEADERSHIP_TRUE = 0x07
|
OperateGuildSetAvoidLeadershipTrue
|
||||||
OPERATE_GUILD_SET_AVOID_LEADERSHIP_FALSE = 0x08
|
OperateGuildSetAvoidLeadershipFalse
|
||||||
OPERATE_GUILD_UPDATE_COMMENT = 0x09
|
OperateGuildUpdateComment
|
||||||
OPERATE_GUILD_DONATE_RANK = 0x0a
|
OperateGuildDonateRank
|
||||||
OPERATE_GUILD_UPDATE_MOTTO = 0x0b
|
OperateGuildUpdateMotto
|
||||||
OPERATE_GUILD_RENAME_PUGI_1 = 0x0c
|
OperateGuildRenamePugi1
|
||||||
OPERATE_GUILD_RENAME_PUGI_2 = 0x0d
|
OperateGuildRenamePugi2
|
||||||
OPERATE_GUILD_RENAME_PUGI_3 = 0x0e
|
OperateGuildRenamePugi3
|
||||||
OPERATE_GUILD_CHANGE_PUGI_1 = 0x0f
|
OperateGuildChangePugi1
|
||||||
OPERATE_GUILD_CHANGE_PUGI_2 = 0x10
|
OperateGuildChangePugi2
|
||||||
OPERATE_GUILD_CHANGE_PUGI_3 = 0x11
|
OperateGuildChangePugi3
|
||||||
OPERATE_GUILD_UNLOCK_OUTFIT = 0x12
|
OperateGuildUnlockOutfit
|
||||||
// 0x13 Unk
|
OperateGuildDonateRoom
|
||||||
// 0x14 Unk
|
OperateGuildGraduateRookie
|
||||||
OPERATE_GUILD_DONATE_EVENT = 0x15
|
OperateGuildDonateEvent
|
||||||
OPERATE_GUILD_EVENT_EXCHANGE = 0x16
|
OperateGuildEventExchange
|
||||||
// 0x17 Unk
|
OperateGuildUnknown // I don't think this op exists
|
||||||
// 0x18 Unk
|
OperateGuildGraduateReturn
|
||||||
OPERATE_GUILD_CHANGE_DIVA_PUGI_1 = 0x19
|
OperateGuildChangeDivaPugi1
|
||||||
OPERATE_GUILD_CHANGE_DIVA_PUGI_2 = 0x1a
|
OperateGuildChangeDivaPugi2
|
||||||
OPERATE_GUILD_CHANGE_DIVA_PUGI_3 = 0x1b
|
OperateGuildChangeDivaPugi3
|
||||||
)
|
)
|
||||||
|
|
||||||
// MsgMhfOperateGuild represents the MSG_MHF_OPERATE_GUILD
|
// MsgMhfOperateGuild represents the MSG_MHF_OPERATE_GUILD
|
||||||
|
|||||||
@@ -616,13 +616,7 @@ func handleMsgMhfOperateGuild(s *Session, p mhfpacket.MHFPacket) {
|
|||||||
pkt := p.(*mhfpacket.MsgMhfOperateGuild)
|
pkt := p.(*mhfpacket.MsgMhfOperateGuild)
|
||||||
|
|
||||||
guild, err := GetGuildInfoByID(s, pkt.GuildID)
|
guild, err := GetGuildInfoByID(s, pkt.GuildID)
|
||||||
|
|
||||||
if err != nil {
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
characterGuildInfo, err := GetCharacterGuildData(s, s.charID)
|
characterGuildInfo, err := GetCharacterGuildData(s, s.charID)
|
||||||
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
doAckSimpleFail(s, pkt.AckHandle, make([]byte, 4))
|
doAckSimpleFail(s, pkt.AckHandle, make([]byte, 4))
|
||||||
return
|
return
|
||||||
@@ -631,22 +625,19 @@ func handleMsgMhfOperateGuild(s *Session, p mhfpacket.MHFPacket) {
|
|||||||
bf := byteframe.NewByteFrame()
|
bf := byteframe.NewByteFrame()
|
||||||
|
|
||||||
switch pkt.Action {
|
switch pkt.Action {
|
||||||
case mhfpacket.OPERATE_GUILD_DISBAND:
|
case mhfpacket.OperateGuildDisband:
|
||||||
|
response := 1
|
||||||
if guild.LeaderCharID != s.charID {
|
if guild.LeaderCharID != s.charID {
|
||||||
s.logger.Warn(fmt.Sprintf("character '%d' is attempting to manage guild '%d' without permission", s.charID, guild.ID))
|
s.logger.Warn(fmt.Sprintf("character '%d' is attempting to manage guild '%d' without permission", s.charID, guild.ID))
|
||||||
return
|
response = 0
|
||||||
|
} else {
|
||||||
|
err = guild.Disband(s)
|
||||||
|
if err != nil {
|
||||||
|
response = 0
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
err = guild.Disband(s)
|
|
||||||
response := 0x01
|
|
||||||
|
|
||||||
if err != nil {
|
|
||||||
// All successful acks return 0x01, assuming 0x00 is failure
|
|
||||||
response = 0x00
|
|
||||||
}
|
|
||||||
|
|
||||||
bf.WriteUint32(uint32(response))
|
bf.WriteUint32(uint32(response))
|
||||||
case mhfpacket.OPERATE_GUILD_RESIGN:
|
case mhfpacket.OperateGuildResign:
|
||||||
guildMembers, err := GetGuildMembers(s, guild.ID, false)
|
guildMembers, err := GetGuildMembers(s, guild.ID, false)
|
||||||
if err == nil {
|
if err == nil {
|
||||||
sort.Slice(guildMembers[:], func(i, j int) bool {
|
sort.Slice(guildMembers[:], func(i, j int) bool {
|
||||||
@@ -665,25 +656,22 @@ func handleMsgMhfOperateGuild(s *Session, p mhfpacket.MHFPacket) {
|
|||||||
}
|
}
|
||||||
guild.Save(s)
|
guild.Save(s)
|
||||||
}
|
}
|
||||||
case mhfpacket.OPERATE_GUILD_APPLY:
|
case mhfpacket.OperateGuildApply:
|
||||||
err = guild.CreateApplication(s, s.charID, GuildApplicationTypeApplied, nil)
|
err = guild.CreateApplication(s, s.charID, GuildApplicationTypeApplied, nil)
|
||||||
|
|
||||||
if err == nil {
|
if err == nil {
|
||||||
bf.WriteUint32(guild.LeaderCharID)
|
bf.WriteUint32(guild.LeaderCharID)
|
||||||
|
} else {
|
||||||
|
bf.WriteUint32(0)
|
||||||
}
|
}
|
||||||
case mhfpacket.OPERATE_GUILD_LEAVE:
|
case mhfpacket.OperateGuildLeave:
|
||||||
var err error
|
|
||||||
|
|
||||||
if characterGuildInfo.IsApplicant {
|
if characterGuildInfo.IsApplicant {
|
||||||
err = guild.RejectApplication(s, s.charID)
|
err = guild.RejectApplication(s, s.charID)
|
||||||
} else {
|
} else {
|
||||||
err = guild.RemoveCharacter(s, s.charID)
|
err = guild.RemoveCharacter(s, s.charID)
|
||||||
}
|
}
|
||||||
|
response := 1
|
||||||
response := 0x01
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
// All successful acks return 0x01, assuming 0x00 is failure
|
response = 0
|
||||||
response = 0x00
|
|
||||||
} else {
|
} else {
|
||||||
mail := Mail{
|
mail := Mail{
|
||||||
RecipientID: s.charID,
|
RecipientID: s.charID,
|
||||||
@@ -693,26 +681,25 @@ func handleMsgMhfOperateGuild(s *Session, p mhfpacket.MHFPacket) {
|
|||||||
}
|
}
|
||||||
mail.Send(s, nil)
|
mail.Send(s, nil)
|
||||||
}
|
}
|
||||||
|
|
||||||
bf.WriteUint32(uint32(response))
|
bf.WriteUint32(uint32(response))
|
||||||
case mhfpacket.OPERATE_GUILD_DONATE_RANK:
|
case mhfpacket.OperateGuildDonateRank:
|
||||||
bf.WriteBytes(handleDonateRP(s, uint16(pkt.Data1.ReadUint32()), guild, false))
|
bf.WriteBytes(handleDonateRP(s, uint16(pkt.Data1.ReadUint32()), guild, false))
|
||||||
case mhfpacket.OPERATE_GUILD_SET_APPLICATION_DENY:
|
case mhfpacket.OperateGuildSetApplicationDeny:
|
||||||
s.server.db.Exec("UPDATE guilds SET recruiting=false WHERE id=$1", guild.ID)
|
s.server.db.Exec("UPDATE guilds SET recruiting=false WHERE id=$1", guild.ID)
|
||||||
case mhfpacket.OPERATE_GUILD_SET_APPLICATION_ALLOW:
|
case mhfpacket.OperateGuildSetApplicationAllow:
|
||||||
s.server.db.Exec("UPDATE guilds SET recruiting=true WHERE id=$1", guild.ID)
|
s.server.db.Exec("UPDATE guilds SET recruiting=true WHERE id=$1", guild.ID)
|
||||||
case mhfpacket.OPERATE_GUILD_SET_AVOID_LEADERSHIP_TRUE:
|
case mhfpacket.OperateGuildSetAvoidLeadershipTrue:
|
||||||
handleAvoidLeadershipUpdate(s, pkt, true)
|
handleAvoidLeadershipUpdate(s, pkt, true)
|
||||||
case mhfpacket.OPERATE_GUILD_SET_AVOID_LEADERSHIP_FALSE:
|
case mhfpacket.OperateGuildSetAvoidLeadershipFalse:
|
||||||
handleAvoidLeadershipUpdate(s, pkt, false)
|
handleAvoidLeadershipUpdate(s, pkt, false)
|
||||||
case mhfpacket.OPERATE_GUILD_UPDATE_COMMENT:
|
case mhfpacket.OperateGuildUpdateComment:
|
||||||
if !characterGuildInfo.IsLeader && !characterGuildInfo.IsSubLeader() {
|
if !characterGuildInfo.IsLeader && !characterGuildInfo.IsSubLeader() {
|
||||||
doAckSimpleFail(s, pkt.AckHandle, make([]byte, 4))
|
doAckSimpleFail(s, pkt.AckHandle, make([]byte, 4))
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
guild.Comment = stringsupport.SJISToUTF8(pkt.Data2.ReadNullTerminatedBytes())
|
guild.Comment = stringsupport.SJISToUTF8(pkt.Data2.ReadNullTerminatedBytes())
|
||||||
guild.Save(s)
|
guild.Save(s)
|
||||||
case mhfpacket.OPERATE_GUILD_UPDATE_MOTTO:
|
case mhfpacket.OperateGuildUpdateMotto:
|
||||||
if !characterGuildInfo.IsLeader && !characterGuildInfo.IsSubLeader() {
|
if !characterGuildInfo.IsLeader && !characterGuildInfo.IsSubLeader() {
|
||||||
doAckSimpleFail(s, pkt.AckHandle, make([]byte, 4))
|
doAckSimpleFail(s, pkt.AckHandle, make([]byte, 4))
|
||||||
return
|
return
|
||||||
@@ -721,27 +708,29 @@ func handleMsgMhfOperateGuild(s *Session, p mhfpacket.MHFPacket) {
|
|||||||
guild.SubMotto = pkt.Data1.ReadUint8()
|
guild.SubMotto = pkt.Data1.ReadUint8()
|
||||||
guild.MainMotto = pkt.Data1.ReadUint8()
|
guild.MainMotto = pkt.Data1.ReadUint8()
|
||||||
guild.Save(s)
|
guild.Save(s)
|
||||||
case mhfpacket.OPERATE_GUILD_RENAME_PUGI_1:
|
case mhfpacket.OperateGuildRenamePugi1:
|
||||||
handleRenamePugi(s, pkt.Data2, guild, 1)
|
handleRenamePugi(s, pkt.Data2, guild, 1)
|
||||||
case mhfpacket.OPERATE_GUILD_RENAME_PUGI_2:
|
case mhfpacket.OperateGuildRenamePugi2:
|
||||||
handleRenamePugi(s, pkt.Data2, guild, 2)
|
handleRenamePugi(s, pkt.Data2, guild, 2)
|
||||||
case mhfpacket.OPERATE_GUILD_RENAME_PUGI_3:
|
case mhfpacket.OperateGuildRenamePugi3:
|
||||||
handleRenamePugi(s, pkt.Data2, guild, 3)
|
handleRenamePugi(s, pkt.Data2, guild, 3)
|
||||||
case mhfpacket.OPERATE_GUILD_CHANGE_PUGI_1:
|
case mhfpacket.OperateGuildChangePugi1:
|
||||||
handleChangePugi(s, uint8(pkt.Data1.ReadUint32()), guild, 1)
|
handleChangePugi(s, uint8(pkt.Data1.ReadUint32()), guild, 1)
|
||||||
case mhfpacket.OPERATE_GUILD_CHANGE_PUGI_2:
|
case mhfpacket.OperateGuildChangePugi2:
|
||||||
handleChangePugi(s, uint8(pkt.Data1.ReadUint32()), guild, 2)
|
handleChangePugi(s, uint8(pkt.Data1.ReadUint32()), guild, 2)
|
||||||
case mhfpacket.OPERATE_GUILD_CHANGE_PUGI_3:
|
case mhfpacket.OperateGuildChangePugi3:
|
||||||
handleChangePugi(s, uint8(pkt.Data1.ReadUint32()), guild, 3)
|
handleChangePugi(s, uint8(pkt.Data1.ReadUint32()), guild, 3)
|
||||||
case mhfpacket.OPERATE_GUILD_UNLOCK_OUTFIT:
|
case mhfpacket.OperateGuildUnlockOutfit:
|
||||||
// TODO: This doesn't implement blocking, if someone unlocked the same outfit at the same time
|
// 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)
|
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:
|
case mhfpacket.OperateGuildDonateRoom:
|
||||||
|
// TODO: Where does this go?
|
||||||
|
case mhfpacket.OperateGuildDonateEvent:
|
||||||
quantity := uint16(pkt.Data1.ReadUint32())
|
quantity := uint16(pkt.Data1.ReadUint32())
|
||||||
bf.WriteBytes(handleDonateRP(s, quantity, guild, true))
|
bf.WriteBytes(handleDonateRP(s, quantity, guild, true))
|
||||||
// TODO: Move this value onto rp_yesterday and reset to 0... daily?
|
// 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)
|
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:
|
case mhfpacket.OperateGuildEventExchange:
|
||||||
rp := uint16(pkt.Data1.ReadUint32())
|
rp := uint16(pkt.Data1.ReadUint32())
|
||||||
var balance uint32
|
var balance uint32
|
||||||
s.server.db.QueryRow(`UPDATE guilds SET event_rp=event_rp-$1 WHERE id=$2 RETURNING event_rp`, rp, guild.ID).Scan(&balance)
|
s.server.db.QueryRow(`UPDATE guilds SET event_rp=event_rp-$1 WHERE id=$2 RETURNING event_rp`, rp, guild.ID).Scan(&balance)
|
||||||
|
|||||||
Reference in New Issue
Block a user