const mongoose = require("mongoose"); const bankUserSchema = new mongoose.Schema({ userID: { type: String, required: true, unique: true }, balance: { type: Number, default: 0 } }); const BankUser = mongoose.models.DiabloBankUser || mongoose.model("DiabloBankUser", bankUserSchema); let statsDB = {}; module.exports = { config: { name: "heist", aliases: ["h"], version: "1.1", author: "Sazzad", countDown: 5, role: 0, shortDescription: "Bank Heist", longDescription: "Rob the bank before police arrives", category: "game", guide: { en: "{p}heist 50 | {p}heist all | {p}heist max" } }, formatMoney: function (num) { if (num >= 1000000) return (num / 1000000).toFixed(2).replace(/\.00$/, "") + "B"; if (num >= 1000000) return (num / 1000000).toFixed(2).replace(/\.00$/, "") + "M"; if (num >= 1000) return (num / 1000).toFixed(2).replace(/\.00$/, "") + "K"; return num.toLocaleString(); }, parseBet: function(str, balance) { str = str.toLowerCase().replace(/,/g, ""); if (str === "all") return Math.min(balance, 69000000); if (str === "max") return 69000000; if (str.includes("b")) return parseFloat(str) * 1000000; if (str.includes("m")) return parseFloat(str) * 1000000; if (str.includes("k")) return parseFloat(str) * 1000; return parseFloat(str); }, onStart: async function ({ api, event, args, message }) { const sendMsg = (txt) => message.reply(txt); const userID = event.senderID; let user = await BankUser.findOne({ userID }); if (!user) user = await BankUser.create({ userID, balance: 1000 }); const now = Date.now(); const ONE_HOUR = 3600000; const MAX_PLAY = 20; if (!statsDB[userID]) statsDB[userID] = { plays: 0, playsLeft: MAX_PLAY, lastReset: now }; let stats = statsDB[userID]; if (now - stats.lastReset >= ONE_HOUR) { stats.playsLeft = MAX_PLAY; stats.lastReset = now; } if (stats.playsLeft <= 0) { let msLeft = ONE_HOUR - (now - stats.lastReset); let m = Math.floor(msLeft / 60000); let s = Math.floor((msLeft % 60000) / 1000); return sendMsg(`ā³ š‹šˆšŒšˆš“ š„ššƒ\nš˜šØš® š°š¢š„ š šžš­ 20 š”šžš¢š¬š­š¬ ššš ššš¢š§ šššŸš­šžš« 1š”š«\nšŸ•’ š‹šžšŸš­: ${m}š¦ ${s}š¬`); } let bet = 50; if (args[0]) bet = this.parseBet(args[0], user.balance); if (isNaN(bet)) return sendMsg(`āŒ Invalid bet. Ex: #heist 50 | #heist all`); if (bet < 50) return sendMsg(`āŒ Minimum bet 50`); if (bet > 69000000) return sendMsg(`āŒ Max bet 69,000,000,000`); if (user.balance < bet) return sendMsg(`šŸ’ø Low balance! Your balance: $${this.formatMoney(user.balance)}`); stats.plays++; stats.playsLeft--; user.balance -= bet; let luck = Math.random(); let result = ""; let payout = 0; let loot = bet * (Math.random() * 2 + 1); if (luck < 0.25) { result = `šŸ‘® š‚š€š”š†š‡š“ šš˜ ššŽš‹šˆš‚š„!`; } else if (luck < 0.55) { result = `🚨 š€š‹š€š‘šŒ š“š‘šˆš†š„š‘š„šƒ! š„š¬šœššš©šžš š°š¢š­š” š©ššš«š­š¢ššš„ š„šØšØš­`; payout = loot * 0.4; user.balance += payout; } else if (luck < 0.85) { result = `šŸ’¼ š’š”š‚š‚š„š’š’! šššš§š¤ š«šØš›šžš`; payout = loot; user.balance += payout; } else { result = `šŸ† šŒš„š†š€ š‡š„šˆš’š“! š•ššš®š„š­ šœš«šššœš¤šžš`; payout = loot * 2.5; user.balance += payout; } await user.save(); const used = MAX_PLAY - stats.playsLeft; return sendMsg( `šŸ¦ ━━ š’š€š™š™š€šƒ'š’ š‡š„šˆš’š“ ━━ šŸ¦ ${result} šŸ’° šˆš§šÆšžš¬š­šžš: $${this.formatMoney(bet)} ${payout > 0? `🟢 š‹šØšØš­: +$${this.formatMoney(payout)}` : `šŸ”“ š‹šØš¬š­: -$${this.formatMoney(bet)}`} šŸ’³ š–ššš„šžš­: $${this.formatMoney(user.balance)} šŸ“Š š‡šžš¢š¬š­š¬: ${used}/20` ); } };