mirror of
https://github.com/JonnyBro/JaBa.git
synced 2024-12-02 01:54:58 +05:00
184 lines
5.4 KiB
JavaScript
184 lines
5.4 KiB
JavaScript
|
const Command = require("../../base/Command");
|
||
|
|
||
|
const games = {};
|
||
|
|
||
|
class Horserace extends Command {
|
||
|
constructor(client) {
|
||
|
super(client, {
|
||
|
name: "horserace",
|
||
|
dirname: __dirname,
|
||
|
enabled: true,
|
||
|
guildOnly: true,
|
||
|
aliases: ["hr"],
|
||
|
memberPermissions: [],
|
||
|
botPermissions: ["SEND_MESSAGES", "EMBED_LINKS"],
|
||
|
nsfw: false,
|
||
|
ownerOnly: false,
|
||
|
cooldown: 2000
|
||
|
});
|
||
|
}
|
||
|
|
||
|
async run(message, args, data) {
|
||
|
if (!args[0]) return message.error("economy/horserace:MISSING_STATUS");
|
||
|
const author = message.author;
|
||
|
|
||
|
if (args[0] === "create") {
|
||
|
let thisGame = games[message.channel.id];
|
||
|
|
||
|
if (thisGame) return message.error("economy/horserace:GAME_RUNNING");
|
||
|
else {
|
||
|
games[message.channel.id] = {
|
||
|
horseSpeeds: [],
|
||
|
bets: []
|
||
|
};
|
||
|
|
||
|
thisGame = games[message.channel.id];
|
||
|
|
||
|
const f = [];
|
||
|
for (let i = 0; i < 5; i++) {
|
||
|
const speed = this.client.functions.randomNum(1, 5);
|
||
|
const profit = {
|
||
|
1: 3.5,
|
||
|
2: 3,
|
||
|
3: 2.5,
|
||
|
4: 2,
|
||
|
5: 1.5,
|
||
|
};
|
||
|
// const profit = Math.floor((((8.9 / 9) * (6 - speed)) + 1.1) * 10) / 10;
|
||
|
thisGame.horseSpeeds.push(speed);
|
||
|
f.push({
|
||
|
name: message.translate("economy/horserace:HORSE_NAME", {
|
||
|
number: i + 1
|
||
|
}),
|
||
|
value: message.translate("economy/horserace:HORSE_VALUE", {
|
||
|
speed,
|
||
|
profit: profit[speed]
|
||
|
})
|
||
|
});
|
||
|
}
|
||
|
message.reply({
|
||
|
embeds: [{
|
||
|
color: data.config.embed.color,
|
||
|
title: message.translate("economy/horserace:EMBED_T"),
|
||
|
fields: f
|
||
|
}]
|
||
|
});
|
||
|
}
|
||
|
} else if (args[0] === "bet") {
|
||
|
const thisGame = games[message.channel.id];
|
||
|
const horse = parseInt(args[1]);
|
||
|
const amount = parseInt(args[2]);
|
||
|
|
||
|
if (horse > 5) return message.error("economy/horserace:HORSE_NUM");
|
||
|
if (!thisGame) return message.error("economy/horserace:NO_GAME_RUNNING");
|
||
|
|
||
|
if (!amount || isNaN(amount) || parseInt(amount, 10) <= 0) return message.error("economy/pay:INVALID_AMOUNT");
|
||
|
if (amount > data.memberData.money) return message.error("economy/pay:ENOUGH_MONEY", {
|
||
|
amount: `**${amount}** ${message.getNoun(amount, message.translate("misc:NOUNS:CREDITS:1"), message.translate("misc:NOUNS:CREDITS:2"), message.translate("misc:NOUNS:CREDITS:5"))}`
|
||
|
});
|
||
|
|
||
|
thisGame.bets[author.id] = {
|
||
|
amount,
|
||
|
horse
|
||
|
};
|
||
|
|
||
|
message.sendT("economy/horserace:BET", {
|
||
|
user: author,
|
||
|
amount: `**${Math.floor(amount)}** ${message.getNoun(Math.floor(amount), message.translate("misc:NOUNS:CREDITS:1"), message.translate("misc:NOUNS:CREDITS:2"), message.translate("misc:NOUNS:CREDITS:5"))}`,
|
||
|
horse
|
||
|
});
|
||
|
|
||
|
} else if (args[0] === "go") {
|
||
|
const thisGame = games[message.channel.id];
|
||
|
const horsePositions = [0, 0, 0, 0, 0];
|
||
|
|
||
|
if (!thisGame) return message.error("economy/horserace:NO_GAME_RUNNING");
|
||
|
|
||
|
// eslint-disable-next-line no-constant-condition
|
||
|
while (true) {
|
||
|
for (let i = 0; i < 5; i++) {
|
||
|
if (thisGame.horseSpeeds[i] >= Math.floor(Math.random() * 15)) {
|
||
|
horsePositions[i] += 1;
|
||
|
if (horsePositions[i] === 3) {
|
||
|
const winnings = [];
|
||
|
|
||
|
const profit = {
|
||
|
1: 3.5,
|
||
|
2: 3,
|
||
|
3: 2.5,
|
||
|
4: 2,
|
||
|
5: 1.5,
|
||
|
};
|
||
|
|
||
|
// const profit = Math.floor((((8.9 / 9) * (6 - thisGame.horseSpeeds[i])) + 1.1) * 10) / 10;
|
||
|
|
||
|
for (let j = 0; j < Object.keys(thisGame.bets).length; j++) {
|
||
|
if (Object.values(thisGame.bets)[j].horse === i + 1) {
|
||
|
winnings.push([Object.keys(thisGame.bets)[j], Object.values(thisGame.bets)[j].amount * profit[thisGame.horseSpeeds[i]]]);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
if (winnings.length === 0) {
|
||
|
for (let j = 0; j < Object.keys(thisGame.bets).length; j++) {
|
||
|
if (Object.values(thisGame.bets)[j].horse !== i + 1) {
|
||
|
const memberData = await this.client.findOrCreateMember({
|
||
|
id: Object.keys(thisGame.bets)[j],
|
||
|
guildID: message.guild.id
|
||
|
});
|
||
|
|
||
|
const info = {
|
||
|
user: message.translate("economy/transactions:HORSERACE"),
|
||
|
amount: Object.values(thisGame.bets)[j].amount,
|
||
|
date: Date.now(),
|
||
|
type: "send"
|
||
|
};
|
||
|
|
||
|
memberData.transactions.push(info);
|
||
|
memberData.money -= Object.values(thisGame.bets)[j].amount;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
message.sendT("economy/horserace:NO_WINNERS", {
|
||
|
horse: i + 1
|
||
|
});
|
||
|
} else {
|
||
|
let winners = "";
|
||
|
for (let j = 0; j < winnings.length; j++) {
|
||
|
winners += `\n<@${winnings[j][0]}> выиграл **${Math.floor(winnings[j][1])}** ${message.getNoun(Math.floor(winnings[j][1]), message.translate("misc:NOUNS:CREDITS:1"), message.translate("misc:NOUNS:CREDITS:2"), message.translate("misc:NOUNS:CREDITS:5"))}!`;
|
||
|
|
||
|
const memberData = await this.client.findOrCreateMember({
|
||
|
id: winnings[j][0],
|
||
|
guildID: message.guild.id
|
||
|
});
|
||
|
|
||
|
const toAdd = Math.floor(winnings[j][1]) - Object.values(thisGame.bets)[j].amount;
|
||
|
|
||
|
const info = {
|
||
|
user: message.translate("economy/transactions:HORSERACE"),
|
||
|
amount: toAdd,
|
||
|
date: Date.now(),
|
||
|
type: "got"
|
||
|
};
|
||
|
|
||
|
memberData.transactions.push(info);
|
||
|
memberData.money += toAdd;
|
||
|
memberData.save();
|
||
|
}
|
||
|
|
||
|
message.sendT("economy/horserace:WINNERS", {
|
||
|
horse: i + 1,
|
||
|
winners
|
||
|
});
|
||
|
}
|
||
|
|
||
|
delete games[message.channel.id];
|
||
|
return;
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
module.exports = Horserace;
|