mirror of
https://github.com/Mezeporta/Erupe.git
synced 2026-02-04 09:15:08 +01:00
add support for Clan Changing Room
This commit is contained in:
6
schemas/patch-schema/22-clan-changing-room.sql
Normal file
6
schemas/patch-schema/22-clan-changing-room.sql
Normal file
@@ -0,0 +1,6 @@
|
|||||||
|
BEGIN;
|
||||||
|
|
||||||
|
ALTER TABLE guilds ADD COLUMN IF NOT EXISTS room_rp INT DEFAULT 0;
|
||||||
|
ALTER TABLE guilds ADD COLUMN IF NOT EXISTS room_expiry TIMESTAMP WITHOUT TIME ZONE;
|
||||||
|
|
||||||
|
END;
|
||||||
@@ -51,6 +51,8 @@ type Guild struct {
|
|||||||
MemberCount uint16 `db:"member_count"`
|
MemberCount uint16 `db:"member_count"`
|
||||||
RankRP uint32 `db:"rank_rp"`
|
RankRP uint32 `db:"rank_rp"`
|
||||||
EventRP uint32 `db:"event_rp"`
|
EventRP uint32 `db:"event_rp"`
|
||||||
|
RoomRP uint16 `db:"room_rp"`
|
||||||
|
RoomExpiry time.Time `db:"room_expiry"`
|
||||||
Comment string `db:"comment"`
|
Comment string `db:"comment"`
|
||||||
PugiName1 string `db:"pugi_name_1"`
|
PugiName1 string `db:"pugi_name_1"`
|
||||||
PugiName2 string `db:"pugi_name_2"`
|
PugiName2 string `db:"pugi_name_2"`
|
||||||
@@ -153,6 +155,8 @@ SELECT
|
|||||||
g.name,
|
g.name,
|
||||||
rank_rp,
|
rank_rp,
|
||||||
event_rp,
|
event_rp,
|
||||||
|
room_rp,
|
||||||
|
COALESCE(room_expiry, '1970-01-01') AS room_expiry,
|
||||||
main_motto,
|
main_motto,
|
||||||
sub_motto,
|
sub_motto,
|
||||||
created_at,
|
created_at,
|
||||||
@@ -706,7 +710,7 @@ func handleMsgMhfOperateGuild(s *Session, p mhfpacket.MHFPacket) {
|
|||||||
}
|
}
|
||||||
bf.WriteUint32(uint32(response))
|
bf.WriteUint32(uint32(response))
|
||||||
case mhfpacket.OperateGuildDonateRank:
|
case mhfpacket.OperateGuildDonateRank:
|
||||||
bf.WriteBytes(handleDonateRP(s, uint16(pkt.Data1.ReadUint32()), guild, false))
|
bf.WriteBytes(handleDonateRP(s, uint16(pkt.Data1.ReadUint32()), guild, 0))
|
||||||
case mhfpacket.OperateGuildSetApplicationDeny:
|
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.OperateGuildSetApplicationAllow:
|
case mhfpacket.OperateGuildSetApplicationAllow:
|
||||||
@@ -747,10 +751,11 @@ func handleMsgMhfOperateGuild(s *Session, p mhfpacket.MHFPacket) {
|
|||||||
// 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.OperateGuildDonateRoom:
|
case mhfpacket.OperateGuildDonateRoom:
|
||||||
// TODO: Where does this go?
|
quantity := uint16(pkt.Data1.ReadUint32())
|
||||||
|
bf.WriteBytes(handleDonateRP(s, quantity, guild, 2))
|
||||||
case mhfpacket.OperateGuildDonateEvent:
|
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, 1))
|
||||||
// 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.OperateGuildEventExchange:
|
case mhfpacket.OperateGuildEventExchange:
|
||||||
@@ -794,7 +799,7 @@ func handleChangePugi(s *Session, outfit uint8, guild *Guild, num int) {
|
|||||||
guild.Save(s)
|
guild.Save(s)
|
||||||
}
|
}
|
||||||
|
|
||||||
func handleDonateRP(s *Session, amount uint16, guild *Guild, isEvent bool) []byte {
|
func handleDonateRP(s *Session, amount uint16, guild *Guild, _type int) []byte {
|
||||||
bf := byteframe.NewByteFrame()
|
bf := byteframe.NewByteFrame()
|
||||||
bf.WriteUint32(0)
|
bf.WriteUint32(0)
|
||||||
saveData, err := GetCharacterSaveData(s, s.charID)
|
saveData, err := GetCharacterSaveData(s, s.charID)
|
||||||
@@ -803,11 +808,21 @@ func handleDonateRP(s *Session, amount uint16, guild *Guild, isEvent bool) []byt
|
|||||||
}
|
}
|
||||||
saveData.RP -= amount
|
saveData.RP -= amount
|
||||||
saveData.Save(s)
|
saveData.Save(s)
|
||||||
updateSQL := "UPDATE guilds SET rank_rp = rank_rp + $1 WHERE id = $2"
|
switch _type {
|
||||||
if isEvent {
|
case 0:
|
||||||
updateSQL = "UPDATE guilds SET event_rp = event_rp + $1 WHERE id = $2"
|
s.server.db.Exec(`UPDATE guilds SET rank_rp = rank_rp + $1 WHERE id = $2`, amount, guild.ID)
|
||||||
|
case 1:
|
||||||
|
s.server.db.Exec(`UPDATE guilds SET event_rp = event_rp + $1 WHERE id = $2`, amount, guild.ID)
|
||||||
|
case 2:
|
||||||
|
var currentRP uint16
|
||||||
|
s.server.db.QueryRow(`SELECT room_rp FROM guilds WHERE id = $1`, guild.ID).Scan(¤tRP)
|
||||||
|
if currentRP+amount >= 30 {
|
||||||
|
s.server.db.Exec(`UPDATE guilds SET room_rp = 0 WHERE id = $1`, guild.ID)
|
||||||
|
s.server.db.Exec(`UPDATE guilds SET room_expiry = $1 WHERE id = $2`, TimeAdjusted().Add(time.Hour*24*7), guild.ID)
|
||||||
|
} else {
|
||||||
|
s.server.db.Exec(`UPDATE guilds SET room_rp = room_rp + $1 WHERE id = $2`, amount, guild.ID)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
s.server.db.Exec(updateSQL, amount, guild.ID)
|
|
||||||
bf.Seek(0, 0)
|
bf.Seek(0, 0)
|
||||||
bf.WriteUint32(uint32(saveData.RP))
|
bf.WriteUint32(uint32(saveData.RP))
|
||||||
return bf.Data()
|
return bf.Data()
|
||||||
@@ -1001,8 +1016,8 @@ func handleMsgMhfInfoGuild(s *Session, p mhfpacket.MHFPacket) {
|
|||||||
bf.WriteUint8(limit)
|
bf.WriteUint8(limit)
|
||||||
|
|
||||||
bf.WriteUint32(55000)
|
bf.WriteUint32(55000)
|
||||||
bf.WriteUint32(0)
|
bf.WriteUint32(uint32(guild.RoomExpiry.Unix()))
|
||||||
bf.WriteUint16(0) // Changing Room RP
|
bf.WriteUint16(guild.RoomRP)
|
||||||
bf.WriteUint16(0) // Ignored
|
bf.WriteUint16(0) // Ignored
|
||||||
|
|
||||||
if guild.AllianceID > 0 {
|
if guild.AllianceID > 0 {
|
||||||
|
|||||||
Reference in New Issue
Block a user