mywork / lib /clan.js
DeeCeeXxx's picture
Upload 199 files
6c07b9a verified
const fs = require("fs");
const path = require("path");
const CLAN_FILE = path.join(__dirname, "clans.json");
const readClans = () => {
if (!fs.existsSync(CLAN_FILE)) {
return {};
}
const data = fs.readFileSync(CLAN_FILE, "utf-8");
return JSON.parse(data);
};
const writeClans = (clanData) => {
fs.writeFileSync(CLAN_FILE, JSON.stringify(clanData, null, 2));
};
const playerOnClan = (sender, chat, clanData) => {
const userClan = Object.values(clanData).find(
(c) => c.members && c.members.some((m) => m.id === sender),
);
return !!userClan;
};
const setMissions = (clan) => {
const currentDate = new Date().toISOString().slice(0, 10);
const currentWeek = new Date().toISOString().slice(0, 7);
if (!clan.missions) {
clan.missions = {
daily: {
description: "",
progress: 0,
target: 0,
reward: 0,
},
weekly: {
description: "",
progress: 0,
target: 0,
reward: 0,
},
};
}
if (!clan.lastDailyMissionDate || clan.lastDailyMissionDate !== currentDate) {
clan.missions.daily = {
description: "Complete 3 battles",
progress: 0,
target: 3,
reward: 50,
};
clan.lastDailyMissionDate = currentDate;
}
if (
!clan.lastWeeklyMissionDate ||
clan.lastWeeklyMissionDate !== currentWeek
) {
clan.missions.weekly = {
description: "Recruit 5 new members",
progress: 0,
target: 5,
reward: 200,
};
clan.lastWeeklyMissionDate = currentWeek;
}
};
const updateMissionProgress = (clan, missionType, progress) => {
if (clan.missions[missionType]) {
clan.missions[missionType].progress += progress;
if (
clan.missions[missionType].progress >= clan.missions[missionType].target
) {
clan.points = (clan.points || 0) + clan.missions[missionType].reward;
if (missionType === "daily") {
clan.missions.daily.progress = 0;
} else if (missionType === "weekly") {
clan.missions.weekly.progress = 0;
}
return `Mission ${missionType} completed! You earned ${clan.missions[missionType].reward} points.`;
}
}
return `Mission ${missionType} progress has been updated.`;
};
const updateClanTaskProgress = (clan, progress) => {
if (!clan.clanTasks) {
clan.clanTasks = {
description: "",
progress: 0,
target: 0,
reward: 0,
};
}
if (clan.clanTasks) {
clan.clanTasks.progress += progress;
if (clan.clanTasks.progress >= clan.clanTasks.target) {
clan.points = (clan.points || 0) + clan.clanTasks.reward;
clan.clanTasks.progress = 0;
return `Clan task completed! The clan earned ${clan.clanTasks.reward} points.`;
}
}
return `Clan task progress has been updated.`;
};
const upgradeClanLevel = (clan, user) => {
const levelCosts = {
2: 100,
3: 200,
4: 400,
5: 800,
};
let nextLevel = clan.level + 1;
let cost = levelCosts[nextLevel];
if (!cost) return "Maximum level already reached.";
if (user.balance < cost)
return `Insufficient balance. You need ${cost} to upgrade to level ${nextLevel}.`;
user.balance -= cost;
clan.level = nextLevel;
return `Clan successfully upgraded to level ${nextLevel}. Your remaining balance: ${user.balance}.`;
};
function simulateWinner(clan1, clan2) {
let clan1Power = clan1.power * clan1.members.length;
let clan2Power = clan2.power * clan2.members.length;
if (clan1Power > clan2Power) {
return clan1.clan;
} else if (clan2Power > clan1Power) {
return clan2.clan;
} else {
return "Draw";
}
}
async function getClanData(clanName) {
let clans = readClans();
return clans[clanName] || null;
}
function saveClanData(clanName, data) {
let clans = readClans();
clans[clanName] = data;
writeClans(clans);
}
function saveTournamentData(tournament) {
let clans = readClans();
clans.tournaments[tournament.name] = tournament;
writeClans(clans);
}
module.exports = {
playerOnClan,
readClans,
writeClans,
setMissions,
updateMissionProgress,
updateClanTaskProgress,
upgradeClanLevel,
simulateWinner,
getClanData,
saveClanData,
saveTournamentData,
};