Kuschel_Swein_1
Member
Heyho! Ich habe mir nun ein eigenes Voteban Skript geschrieben, jedoch habe ich ein Problem. Wenn ein Voteban gestartet wird kann man die Befehle zum abstimmen aufgrund meiner "wait" Funktion nicht verwenden. Hat da jemand vllt eine Idee?
Danke im Vorraus <3
JavaScript:
registerPlugin({
name: "Startkick",
version: "0.3.1",
description: "Banne Nutzer Temporär vom Server",
author: "Kuschel",
backends: ["ts3"],
engine: ">= 1.0.0",
autorun: false,
enableWeb: false,
hidden: false,
requiredModules: [],
vars: [{
name: "admins",
type: "strings",
title: "Benutzer welche Kicken können",
}, {
name: "bypass",
type: "strings",
title: "Benutzer welche nicht gekickt werden können",
}, {
name: "reseter",
type: "strings",
title: "Benutzer welche den Cooldown zurücksetzen können",
}],
voiceCommands: []
}, function(_, config, meta) {
const engine = require("engine");
const backend = require("backend");
const event = require("event");
const store = require("store");
let cooldown = 2880;
event.on("chat", ev => {
let client = ev.client;
let message = ev.text.split(" ").filter(i => /\s/.test(i) === false && i.length > 0);
let command = message[0].toLowerCase();
if (command === "!startkick") {
let target = message.slice(1).join(" ");
let reason = message.slice(2).join(" ");
if (hasServerGroupWithID(client, config.admins)) {
if (target.length <= 0)
return client.chat("[color=#b700ff]Rangsystem ×[/color] Falscher Syntax, verwende bitte [color=red]!startkick <Nutzer> <Grund>[/color]."); // Wrong syntax message
if (reason.length <= 0)
return client.chat("[color=#b700ff]Rangsystem ×[/color] Falscher Syntax, verwende bitte [color=red]!startkick <Nutzer> <Grund>[/color]."); // Wrong syntax message
let targetClient;
if (backend.getClientByNick(target)) {
targetClient = backend.getClientByNick(target);
} else if (backend.getClientByUID(target)) {
targetClient = backend.getClientByUID(target);
} else return client.chat("[color=#b700ff]Rangsystem ×[/color] Es wurde kein Benutzer mit diesem Namen gefunden.");
if (isAllowed(targetClient)) {
if (cooldownExpired(client)){
if (store.get("kickon") === undefined ) {
store.set("kickon", 1);
startCooldown(client);
backend.getClients().forEach(client => sendBroadcast(client, "»---------------=====[color=lightblue][[/color][b]» Startkick «[/b][color=lightblue]][/color]=====---------------«" ));
backend.getClients().forEach(client => sendBroadcast(client, "[b]Ersteller:[/b] " + client.name() ));
backend.getClients().forEach(client => sendBroadcast(client, "[b]Bestrafender:[/b] " + targetClient.name() ));
backend.getClients().forEach(client => sendBroadcast(client, "[b]Grund:[/b] " + reason ));
backend.getClients().forEach(client => sendBroadcast(client, "[b]Abstimmungsdauer:[/b] 30 Sekunden"));
backend.getClients().forEach(client => sendBroadcast(client, ""));
backend.getClients().forEach(client => sendBroadcast(client, " » Stimme jetzt mit [color=red]!kickja[/color] für den Rauswurf von [color=red]" + targetClient.name() + "[/color] und mit [color=red]!kicknein[/color] gegen den Rauswurf von [color=red]" + targetClient.name() + "[/color] ab."));
backend.getClients().forEach(client => sendBroadcast(client, "»---------------=====[color=lightblue][[/color][b]» Startkick «[/b][color=lightblue]][/color]=====---------------«" ));
wait(27000);
backend.getClients().forEach(client => sendBroadcast(client, "[color=#b700ff]Startkick ×[/color] Die Abstimmung um [color=red]" + targetClient.name() + "[/color] zu bestrafen endet in [color=red]3 Sekunden[/color]."));
wait(1000);
backend.getClients().forEach(client => sendBroadcast(client, "[color=#b700ff]Startkick ×[/color] Die Abstimmung um [color=red]" + targetClient.name() + "[/color] zu bestrafen endet in [color=red]2 Sekunden[/color]."));
wait(1000);
backend.getClients().forEach(client => sendBroadcast(client, "[color=#b700ff]Startkick ×[/color] Die Abstimmung um [color=red]" + targetClient.name() + "[/color] zu bestrafen endet in [color=red]einer Sekunde[/color]."));
wait(1000);
backend.getClients().forEach(client => sendBroadcast(client, "[color=#b700ff]Startkick ×[/color] Die Abstimmung um [color=red]" + targetClient.name() + "[/color] zu bestrafen ist beendet."));
backend.getClients().forEach(client => sendBroadcast(client, "[color=#b700ff]Startkick ×[/color] Es waren [color=red]" + store.get("kickja") + "[/color] Benutzer dafür [color=red]" + targetClient.name() + "[/color] rauszuwerfen und [color=red]" + store.get("kicknein") + "[/color] Benutzer dagegen."));
if (store.get("kickja") > store.get("kicknein")) {
backend.getClients().forEach(client => sendBroadcast(client, "[color=#b700ff]Startkick ×[/color] Der Benutzer [color=red]" + targetClient.name() + "wurde erfolgreich für [color=red]5 Minuten[/color] rausgeworfen."));
targetClient.ban(300, "Du wurdest durch einen Startkick rausgeworfen!");
store.unset("kickon");
store.unset("kickja");
store.unset("kicknein");
backend.getClients().forEach(client => store.unset("kickvote" + client.uid()));
backend.getClients().forEach(client => sendBroadcast(client, "[color=#b700ff]Startkick ×[/color] Die Abstimmung wurde beendet."));
}
if (store.get("kickja") < store.get("kicknein")) {
backend.getClients().forEach(client => sendBroadcast(client, "[color=#b700ff]Startkick ×[/color] Der Benutzer [color=red]" + targetClient.name() + "wurde [b]nicht[/b] rausgeworfen."));
store.unset("kickon");
store.unset("kickja");
store.unset("kicknein");
backend.getClients().forEach(client => store.unset("kickvote" + client.uid()));
backend.getClients().forEach(client => sendBroadcast(client, "[color=#b700ff]Startkick ×[/color] Die Abstimmung wurde beendet."));
}
if (store.get("kickja") == store.get("kicknein")) {
backend.getClients().forEach(client => sendBroadcast(client, "[color=#b700ff]Startkick ×[/color] Der Benutzer [color=red]" + targetClient.name() + "wurde [b]nicht[/b] rausgeworfen. Da es einen Stimmengleichstand gab."));
store.unset("kickon");
store.unset("kickja");
store.unset("kicknein");
backend.getClients().forEach(client => store.unset("kickvote" + client.uid()));
backend.getClients().forEach(client => sendBroadcast(client, "[color=#b700ff]Startkick ×[/color] Die Abstimmung wurde beendet."));
}
} else return client.chat("[color=#b700ff]Rangsystem ×[/color] Derzeit läuft bereits ein Startkick.");
} else return client.chat("[color=#b700ff]Rangsystem ×[/color] Du kannst diesen Befehl nur alle [color=red]2 Tage[/color] verwenden.");
} else return client.chat("[color=#b700ff]Rangsystem ×[/color] Du kannst diesen Benutzer nicht rauswerfen.");
} else return client.chat("[color=#b700ff]Rangsystem ×[/color] Dieser Befehl ist erst ab dem [color=red]Swein Rang[/color] verfügbar.");
} else {
if (command === "!kickja") {
if (store.get("kickon") === undefined) {
return client.chat("[color=#b700ff]Rangsystem ×[/color] Es läuft derzeit keine Abstimmung.");
} else {
if (hasServerGroupWithID(client, 10)) {
return client.chat("[color=#b700ff]Rangsystem ×[/color] Gäste können leider nicht abstimmen.");
}
if (store.get("kickvote" + client.uid()) == undefined) {
store.set("kickvote" + client.uid(), 1);
actualvotej = store.get("kickja");
actualvotej++;
store.set("kickja", actualvotej);
client.chat("[color=#b700ff]Rangsystem ×[/color] Du hast für den Rauswurf gestimmt.");
} else return client.chat("[color=#b700ff]Rangsystem ×[/color] Du hast bereits abgestimmt!");
} }
if (command === "!kicknein") {
if (store.get("kickon") === undefined) {
return client.chat("[color=#b700ff]Rangsystem ×[/color] Es läuft derzeit keine Abstimmung.");
} else {
if (hasServerGroupWithID(client, 10)) {
return client.chat("[color=#b700ff]Rangsystem ×[/color] Gäste können leider nicht abstimmen.");
}
if (store.get("kickvote" + client.uid()) == undefined) {
store.set("kickvote" + client.uid(), 1);
actualvoten = store.get("kicknein");
actualvoten++;
store.set("kicknein", actualvoten);
client.chat("[color=#b700ff]Rangsystem ×[/color] Du hast gegen den Rauswurf gestimmt.");
} else return client.chat("[color=#b700ff]Rangsystem ×[/color] Du hast bereits abgestimmt!");
} }
if (command === "!resetstartkick") {
let target = message.slice(1).join(" ");
if (target.length <= 0)
return client.chat("[color=#b700ff]Rangsystem ×[/color] Falscher Syntax, verwende bitte [color=red]!resertsrartkick <Benutzer>[/color]."); // Wrong syntax message
let targetClient;
if (backend.getClientByNick(target)) {
targetClient = backend.getClientByNick(target);
} else if (backend.getClientByUID(target)) {
targetClient = backend.getClientByUID(target);
} else return client.chat("[color=#b700ff]Rangsystem ×[/color] Dieser Benutzer wurde nicht gefunden.");
if (allowedReset(client)) {
if (cooldownExpired(targetClient) === false) {
removeCooldown(targetClient);
client.chat("[color=#b700ff]Rangsystem ×[/color] Du hast den Startkick Cooldown des Benutzers erfolgreich zurückgesetzt."); // Executor
targetClient.chat("[color=#b700ff]Rangsystem ×[/color] Dein Startkick Cooldown wurde zurückgesetzt.") // Target
} else return client.chat("[color=#b700ff]Rangsystem ×[/color] Dieser Benutzer hat keinen Cooldown");
} else return client.chat("[color=#b700ff]Rangsystem ×[/color] [color=red]Dazu hast du keine Rechte!");
}
}
});
function allowedReset(client) {
if (config.reseter === undefined)
return false;
else return checkArrays(client.getServerGroups().map(group => group.id()), config.reseter);
}
/* Some functions are by DrWarpMan */
function getClientsWithGroups(groups) {
let clients = [];
backend.getClients().forEach(client => {
if (checkGroups(client, groups))
clients.push(client);
});
return clients;
}
function wait(ms){
var start = new Date().getTime();
var end = start;
while(end < start + ms) {
end = new Date().getTime();
}
}
function sendBroadcast(client, message) {
if (client.isSelf() === false)
client.chat(message);
}
function checkGroups(client, groups) {
if (!config.broadcastGroups)
return false;
let clientGroups = client.getServerGroups().map(group => group.id());
return checkArrays(clientGroups, groups);
}
function checkArrays(arr1, arr2) {
return arr2.some(item => arr1.includes(item));
}
function startCooldown(client) {
let cooldowns = store.get("cooldowns") || {};
cooldowns[client.uid()] = Date.now();
store.set("cooldowns", cooldowns);
}
function removeCooldown(client) {
let cooldowns = store.get("cooldowns") || {};
if (cooldowns[client.uid()] !== undefined) {
delete cooldowns[client.uid()];
store.set("cooldowns", cooldowns);
}
}
function allowedReset(client) {
if (config.admins === undefined)
return false;
else return checkArrays(client.getServerGroups().map(group => group.id()), config.admins);
}
function cooldownExpired(client) {
let cooldowns = store.get("cooldowns") || {};
if (cooldowns[client.uid()] === undefined)
return true;
return (Date.now() - cooldowns[client.uid()]) > cooldown * 60 * 1000;
}
function isAllowed(client) {
if (config.bypass === undefined)
return true;
else return (checkArrays(client.getServerGroups().map(group => group.id()), config.bypass) === false);
}
function hasServerGroupWithID(client, id) {
return client.getServerGroups().some(function(group) {
return group.id() == id;
});
}
// SCRIPT LOADED SUCCESFULLY
engine.log("\n[Script] \"" + meta.name + "\" [Version] \"" + meta.version + "\" [Author] \"" + meta.author + "\"");
});
Danke im Vorraus <3