57 lines
2.4 KiB
JavaScript
57 lines
2.4 KiB
JavaScript
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);
|
|
}; |