151 lines
5.6 KiB
JavaScript
151 lines
5.6 KiB
JavaScript
const GuildDataGeneralPacket = require("../Packets/GuildDataGeneral");
|
|
const GuildDataMemberPacket = require("../Packets/GuildDataMember");
|
|
const GuildDataApplicantPacket = require("../Packets/GuildDataApplicant");
|
|
const GuildDataEconomyPacket = require("../Packets/GuildDataEconomy");
|
|
const GuildDataIslandPacket = require("../Packets/GuildDataIsland");
|
|
const GuildDataIslandTowerPacket = require("../Packets/GuildDataIslandTower");
|
|
|
|
const LEVELS = require("../Data/levels");
|
|
|
|
const queries = require("../Data/queries");
|
|
const { QUERY_FETCH_GUILD_OFFLINE_MEMBERS } = queries;
|
|
|
|
const Game = require("../Game/Game");
|
|
const { players, guildIslands } = Game;
|
|
|
|
module.exports = async function (ws, message, player) {
|
|
console.info(player.guild.id, player.guild.ownerID)
|
|
if (!player.guild.id) return console.info("nuh uh GuildDataMessage");
|
|
|
|
const applicantsOffline = [];
|
|
const playersOffline = [];
|
|
const packets = [];
|
|
console.info("GuildDataMessage", player.id);
|
|
player.guild.members.forEach(member => {
|
|
if (!players[member.id]) playersOffline.push(member.id);
|
|
else {
|
|
const onlinePlayer = players[member.id];
|
|
const guildDataMember = {
|
|
id: member.id,
|
|
permission: member.permission,
|
|
isOnline: true,
|
|
pirateLevel: onlinePlayer.pirateLevel,
|
|
name: onlinePlayer.name
|
|
};
|
|
|
|
const guildMemberPacket = GuildDataMemberPacket(guildDataMember);
|
|
packets.push(guildMemberPacket);
|
|
};
|
|
});
|
|
|
|
if (playersOffline.length) {
|
|
const offlinePlayersQuery = await execute(QUERY_FETCH_GUILD_OFFLINE_MEMBERS, playersOffline);
|
|
if (offlinePlayersQuery.data) {
|
|
offlinePlayersQuery.data.forEach(offlinePlayer => {
|
|
const guildDataMember = {
|
|
id: offlinePlayer.id,
|
|
isOnline: false,
|
|
pirateLevel: LEVELS.pirateLevel(offlinePlayer.amount),
|
|
name: offlinePlayer.username
|
|
};
|
|
|
|
const guildMemberPacket = GuildDataMemberPacket(guildDataMember);
|
|
packets.push(guildMemberPacket);
|
|
});
|
|
};
|
|
};
|
|
|
|
player.guild.requests.forEach(request => {
|
|
const applicantPlayer = players[request.playerID];
|
|
if (!applicantPlayer) applicantsOffline.push(request.playerID);
|
|
else {
|
|
const guildDataApplicant = {
|
|
id: request.playerID,
|
|
pirateLevel: applicantPlayer.pirateLevel,
|
|
username: applicantPlayer.name
|
|
};
|
|
|
|
const guildDataApplicantPacket = GuildDataApplicantPacket(guildDataApplicant);
|
|
packets.push(guildDataApplicantPacket);
|
|
};
|
|
});
|
|
|
|
if (applicantsOffline.length) {
|
|
const offlineApplicantsQuery = await execute(QUERY_FETCH_GUILD_OFFLINE_MEMBERS, applicantsOffline);
|
|
if (offlineApplicantsQuery.data) {
|
|
offlineApplicantsQuery.data.forEach(offlineApplicant => {
|
|
const guildDataApplicant = {
|
|
id: offlineApplicant.id,
|
|
pirateLevel: LEVELS.pirateLevel(offlineApplicant.amount),
|
|
username: offlineApplicant.username
|
|
};
|
|
|
|
const guildDataApplicantPacket = GuildDataApplicantPacket(guildDataApplicant);
|
|
packets.push(guildDataApplicantPacket);
|
|
});
|
|
};
|
|
};
|
|
|
|
const guildDataGeneral = {
|
|
level: player.guild.level,
|
|
experience: player.guild.experiencePoints,
|
|
size: {
|
|
current: player.guild.size,
|
|
maximum: player.guild.sizeMaximum
|
|
},
|
|
taxRates: player.guild.taxRates.map(r => r * 100),
|
|
tag: player.guild.tag,
|
|
name: player.guild.name,
|
|
description: player.guild.description,
|
|
timestamps: player.guild.timestamps
|
|
};
|
|
|
|
const guildDataGeneralPacket = GuildDataGeneralPacket(guildDataGeneral);
|
|
packets.push(guildDataGeneralPacket);
|
|
console.info(guildDataGeneral)
|
|
const guildDataEconomy = [];
|
|
player.guild.bank.list.each((_, value) => {
|
|
guildDataEconomy.push({
|
|
id: value.id,
|
|
amount: value.amount
|
|
});
|
|
});
|
|
console.info(guildDataEconomy, "guildDataEconomy")
|
|
const guildDataEconomyPacket = GuildDataEconomyPacket(guildDataEconomy);
|
|
packets.push(guildDataEconomyPacket);
|
|
|
|
guildIslands.forEach(island => {
|
|
if (player.guild.id !== island.guild.id) return;
|
|
|
|
const islandProperties = {
|
|
id: island.id,
|
|
mapID: island.locationMapID,
|
|
position: island.position,
|
|
};
|
|
|
|
const guildDataIslandPacket = GuildDataIslandPacket(islandProperties);
|
|
packets.push(guildDataIslandPacket);
|
|
|
|
island.towers.forEach(tower => {
|
|
const towerProperties = {
|
|
entityTypeID: tower.entityTypeID,
|
|
id: tower.id,
|
|
guildIslandID: island.id,
|
|
order: tower.order,
|
|
hp: {
|
|
current: tower.hp.current
|
|
},
|
|
isRepairing: tower.isRepairing()
|
|
};
|
|
|
|
const guildDataIslandTowerPacket = GuildDataIslandTowerPacket(towerProperties);
|
|
packets.push(guildDataIslandTowerPacket);
|
|
});
|
|
});
|
|
|
|
const guildTopic = Game.getTopic(player.guild.topic);
|
|
player.topics.addItem(player.guild.topic, guildTopic);
|
|
console.info("Sending out general data to", player.id);
|
|
player.map.registerIndividualNetworkPacket(player.id, packets);
|
|
};
|