const GuildMemberNewPacket = require("../Packets/GuildMemberNew"); const GuildDataMemberPacket = require("../Packets/GuildDataMember"); const GuildLeaveConfirmationPacket = require("../Packets/GuildLeaveConfirmation"); const GuildDataApplicantRemovePacket = require("../Packets/GuildDataApplicantRemove"); const LEVELS = require("../Data/levels"); const queries = require("../Data/queries"); const { QUERY_FETCH_GUILD_OFFLINE_MEMBERS } = queries; const Game = require("../Game/Game"); const { players } = Game; module.exports = async function (ws, message, player) { if (!player.guild.id) return const playerID = message.getUint32(1); const guild = player.guild; const isRequested = guild.hasRequested(playerID); if (!isRequested) return const acceptedMember = { id: playerID }; const isAcceptSuccessful = guild.addMember(acceptedMember); if (!isAcceptSuccessful) return; const topic = Game.getTopic(guild.topic); const onlinePlayer = players[playerID]; if (onlinePlayer) { onlinePlayer.guild = guild; const guildMemberNew = { playerID: onlinePlayer.id, tag: player.guild.tag }; const guildMemberStateConfirmation = GuildLeaveConfirmationPacket(true); onlinePlayer.map.registerIndividualNetworkPacket(playerID, guildMemberStateConfirmation); const packet = GuildMemberNewPacket(guildMemberNew); onlinePlayer.map.registerNetworkPacket(onlinePlayer.id, packet); const guildDataMember = { id: onlinePlayer.id, permission: 0, isOnline: true, pirateLevel: onlinePlayer.pirateLevel, name: onlinePlayer.name }; const guildMemberPacket = GuildDataMemberPacket(guildDataMember); topic.push(guildMemberPacket); const guildDataApplicantRemove = { id: playerID }; const guildDataApplicantRemovePacket = GuildDataApplicantRemovePacket(guildDataApplicantRemove); topic.push(guildDataApplicantRemovePacket); } else { const offlinePlayerQuery = await execute(QUERY_FETCH_GUILD_OFFLINE_MEMBERS, [playerID]); if (!offlinePlayerQuery.data) return; const { username, amount } = offlinePlayerQuery.data[0]; const guildDataMember = { id: playerID, permission: 0, isOnline: false, pirateLevel: LEVELS.pirateLevel(amount), name: username }; const guildMemberPacket = GuildDataMemberPacket(guildDataMember); topic.push(guildMemberPacket); const guildDataApplicantRemove = { id: playerID }; const guildDataApplicantRemovePacket = GuildDataApplicantRemovePacket(guildDataApplicantRemove); topic.push(guildDataApplicantRemovePacket); }; await execute("INSERT INTO guildmembers (playerID, guildID) VALUES (?, ?)", [playerID, guild.id]); await execute("DELETE FROM guildrequests WHERE playerID = ?", [playerID]); };