UNPKG

ggejs

Version:

A powerful JavaScript library for interacting with the server of Goodgame Empire: Four Kingdoms

124 lines (120 loc) 4.74 kB
const WorldMapOwnerInfo = require("../../../structures/WorldMapOwnerInfo"); module.exports.name = "hgh"; /** * @param {Socket} socket * @param {number} errorCode * @param {{LT:number, LID: number, L: Array<Array>, LR:number, SV:string, FR: number, IGH: number}} params */ module.exports.execute = function (socket, errorCode, params) { if (!params || !params.LID) return; const listType = params.LT; const leaderboard = params.L; const highScoreItems = []; if (Array.isArray(leaderboard)) { for (const item of leaderboard) { const highScoreItem = getHighScoreItem(socket.client, listType, item); if (highScoreItem) highScoreItems.push(highScoreItem); } } const output = { listType: listType, leagueId: params.LID, lastRow: params.LR, searchValue: params.SV, foundRank: params.FR, items: highScoreItems }; const SV = output.searchValue.toString().toLowerCase().normalize("NFD").replace(/[\u0300-\u036f]/g, ""); socket[`hgh_${output.listType}_${SV}`] = output; } /** * @param {Client} client * @param {number} listType * @param {Array} itemData */ function getHighScoreItem(client, listType, itemData) { if (listType !== 53 && !itemData[2]) return null; /** @type {AllianceHighScoreItem | PlayerHighScoreItem} */ const highScoreItem = {}; switch (listType) { case 10: case 12: case 11: case 47: case 45: case 501: case 59: case 52: case 21: case 69: case 70: case 74: case 77: case 79: // TODO: AllianceHighscoreItemServerInfoVO highScoreItem["alliance"] = parseAlliance(itemData[2]); highScoreItem["rank"] = itemData[0]; highScoreItem["points"] = itemData[1]; break; case 13: // TODO: AllianceHighscoreItemServerInfoVO highScoreItem["alliance"] = parseAlliance(itemData[3]); highScoreItem["isKingAlliance"] = itemData[0]; highScoreItem["rank"] = itemData[1]; highScoreItem["points"] = itemData[2]; break; case 20: // TODO: SPTournamentHighscoreItemServerInfoVO highScoreItem["playerName"] = itemData[3]; highScoreItem["playerId"] = itemData[2]; highScoreItem["rank"] = itemData[0]; highScoreItem["points"] = itemData[1]; break; case 53: // TODO: PlayerHighscoreItemServerInfoVO highScoreItem["player"] = new WorldMapOwnerInfo(client).fillFromParamObject(itemData[1]); highScoreItem["rank"] = itemData[0]; break; case 63: case 64: // TODO: SeasonLeagueHighscoreItemServerInfoVO highScoreItem["player"] = new WorldMapOwnerInfo(client).fillFromParamObject(itemData[2]); highScoreItem["rank"] = itemData[0]; highScoreItem["points"] = itemData[1]; highScoreItem["playerName"] = itemData[3]; highScoreItem["seasonRankId"] = itemData[2]["KLRID"]; highScoreItem["seasonMedalsData"] = itemData[2]["KLMO"]; break; case 67: case 68: // TODO: SeasonLeagueAllianceHighscoreItemServerInfoVO highScoreItem["alliance"] = parseAlliance(itemData[2]); highScoreItem["rank"] = itemData[0]; highScoreItem["points"] = itemData[1]; highScoreItem["seasonRankId"] = highScoreItem.rank; highScoreItem["seasonMedalsData"] = itemData[3]["KLMO"]; highScoreItem["amountVisible"] = listType !== 67; break; default: // TODO: PlayerHighscoreItemServerInfoVO highScoreItem["player"] = new WorldMapOwnerInfo(client).fillFromParamObject(itemData[2]); highScoreItem["rank"] = itemData[0]; highScoreItem["points"] = itemData[1]; highScoreItem["playerName"] = itemData[3] ?? highScoreItem["player"].playerName; highScoreItem["rawValues"] = itemData; } highScoreItem["highscoreTypeId"] = listType; return highScoreItem; } /** * @param {[number, string, number, number]} params * @return {{allianceId: number, allianceName: string, memberAmount: number, allianceCurrentFame: number}} */ function parseAlliance(params) { return { allianceId: params.shift(), allianceName: params.shift(), memberAmount: params.shift(), allianceCurrentFame: params.shift() }; }