const GuildMemberOldPacket = require("../Packets/GuildMemberOld"); const GuildLeaveConfirmationPacket = require("../Packets/GuildLeaveConfirmation"); const GuildDataMemberRemovedPacket = require("../Packets/GuildDataMemberRemoved"); const queries = require("../Data/queries"); const { QUERY_DELETE_GUILD_MEMBER } = queries; const constants = require("../Data/constants"); const { GUILD_PERMISSIONS } = constants; const { GUILD_PERMISSION_KICK } = GUILD_PERMISSIONS; const Game = require("../Game/Game"); const { players, guilds } = Game; module.exports = async function (ws, message, player) { const playerID = message.getUint32(1); const targetKickPlayer = players[playerID]; const guild = targetKickPlayer ? targetKickPlayer.guild : player.guild; const targetMember = guild.getMember(playerID); if (!targetMember) return; const authorMember = guild.getMember(player.id); if (!authorMember) return; const permissionKick = authorMember.permission & GUILD_PERMISSION_KICK; if (playerID !== player.id && !permissionKick) return; if (playerID === player.id && guild.isLeader(playerID)) return; const kickResultQuery = await execute(QUERY_DELETE_GUILD_MEMBER, [playerID, 0]); if (!kickResultQuery.data || kickResultQuery.data.affectedRows !== 1) return; guild.removeMember(playerID); const guildDataMemberRemoved = { id: playerID }; const guildDataMemberRemovedPacket = GuildDataMemberRemovedPacket(guildDataMemberRemoved); // player.map.registerIndividualNetworkPacket(player.id, guildDataMemberRemovedPacket); const topic = Game.getTopic(guild.topic); topic.push(guildDataMemberRemovedPacket); if (!targetKickPlayer) return; targetKickPlayer.topics.removeItem(targetKickPlayer.guild.topic); console.info("removed guild topic from player", targetKickPlayer.guild.topic); targetKickPlayer.guild = guilds[0]; const guildLeaveConfirmation = GuildLeaveConfirmationPacket(false); targetKickPlayer.map.registerIndividualNetworkPacket(playerID, guildLeaveConfirmation); const guildMemberOld = { playerID }; const guildMemberOldPacket = GuildMemberOldPacket(guildMemberOld); targetKickPlayer.map.registerNetworkPacket(playerID, guildMemberOldPacket); };