123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732 |
- @simplelobby
- ignoreGoto("checklobby");
- wait();
- if(event == "entity_damage") {
- if(!isPlayer(entity)) {
- goto("simplelobby");
- }
- player = entity;
- if(!player.hasMinigameId(player, script_id)) {
- goto("simplelobby");
- }
- cancel = true;
- if(minigame.hasSpecificLobbyHandling()) {
- gosub("specificLobbyHandling");
- }
- goto("simplelobby");
- }
- if(event == "entity_mount") {
- if(!isPlayer(entity)) {
- goto("simplelobby");
- }
- player = entity;
- }
- if(event == "custom_command") {
- if(!isPlayer(sender)) {
- goto("simplelobby");
- }
- player = sender;
- }
- if(!player.hasMinigameId(player, script_id)) {
- goto("simplelobby");
- }
- if(minigame.hasSpecificLobbyHandling()) {
- gosub("specificLobbyHandling");
- }
- if(event == "minigame_join") {
- gosub("lobbycore");
- }
- elseif(event == "block_break" || event == "block_place") {
- cancel = true;
- }
- elseif(event == "player_quit" || event == "player_giveup") {
- gosub("leavelobbycore");
- }
- elseif(event == "custom_command") {
- if(command == "startgame") {
- if(minigame.hasManualStart()) {
- if(minigame.isStarting()) {
- msg.prefix(player, gamename, "Already started.");
- goto("simplelobby");
- }
- goto("startcountdown");
- }
- //jumpstart
- if(!perm.has("startgame.jump", player)) {
- perm.no("startgame.jump", player);
- goto("simplelobby");
- }
- if(minigame.isStarting()) {
- if(noticetime > 5) {
- noticetime = 5;
- minigame.speakAll(gamename, "Left time reduced to §b5 §rseconds.");
- goto("simplelobby");
- }
- msg.prefix(player, gamename, "Left time can't be reduced.");
- goto("simplelobby");
- }
- msg.prefix(player, gamename, "Game is not starting.");
- }
- }
- goto("simplelobby");
- @startcountdown
- if(!minigame.canStart()) {
- minigame.waiting();
- goto("simplelobby");
- }
- minigame.setStarting(true);
- if(noticetime == 5) {
- minigame.titleAll(gamename, mapname, 20, 60, 20);
- }
- if(noticetime == 1) {
- minigame.speakAll(gamename, string.concat("The game starts in §b", string.number(noticetime), " §rsecond."));
- } else {
- minigame.speakAll(gamename, string.concat("The game starts in §b", string.number(noticetime), " §rseconds."));
- }
- if(noticetime == 0) {
- sign.started(gamesignloc);
- goto("finalstart");
- }
- if(noticetime > 30) {
- s_time = 200; //10s
- } elseif(noticetime > 5) {
- s_time = 100; //5s
- } else {
- s_time = 20; //1s
- }
- noticetime -= s_time / 20;
- sgoto(s_time, "startcountdown");
- player_list = minigame.getPlayers(script_id);
- p_amount = list.getSize(player_list);
- for(i = 0; i < p_amount; i++) {
- p = player.get(list.getIndex(player_list, i));
- sound.spawnForPlayer(p, join_sound, sound_category_ambient);
- }
- goto("simplelobby");
- @lobbycore
- minigame.speakAll(gamename, string.concat("§8", player.getNickName(player), "§r joined the game."));
- if(!minigame.hasNoLobbyTeleport()) {
- modTimer.entityTeleport(player, lobbyspawnloc);
- }
- if(minigame.doPlayerResetInCore()) {
- resetplayer(player);
- }
- title.send(player, text.new(gamename), text.new(mapname));
- if(minigame.hasManualStart()) {
- return;
- }
- if(!minigame.isStarting()) {
- if(minigame.canStart()) {
- goto("startcountdown");
- }
- minigame.waiting();
- }
- return;
- @leavelobbycore
- minigame.speakAll(gamename, string.concat("§8", player.getNickName(player), "§r left the game."));
- script = script.getFromId(script_id);
- if(player.isPartyLeader(player)) {
- leader_uuid = player.getUuid(player);
- player_list = minigame.getPlayers(script_id);
- list = party.getList(player.getPartyId(player));
- iter = iterator(list);
- while(hasNext(iter)) {
- p_uuid = next(iter);
- p = player.get(p_uuid);
- if(list.contains(player_list, p_uuid)) {
- minigame.kickPlayer(script, p);
- }
- }
- } else {
- minigame.kickPlayer(script, player);
- }
- p_amount = minigame.getPlayerAmount(script_id);
- if(p_amount == 0) {
- minigame.term(script, gamesignloc);
- }
- if(!minigame.canStart()) {
- minigame.waiting();
- goto("simplelobby");
- }
- return;
- //--------------------------------------------------
- //Minigame-Utils
- //--------------------------------------------------
- function minigame.setLobbyCounter(seconds) {
- $lobby_counter_init = seconds;
- $noticetime = seconds;
- }
- function minigame.getLobbyCounter() {
- if($lobby_counter_init == null) {
- $lobby_counter_init = 20;
- $noticetime = 20;
- }
- return $lobby_counter_init;
- }
- function minigame.setNoLobbyTeleport(bool) {
- $no_lobby_tp = bool;
- }
- function minigame.hasNoLobbyTeleport() {
- bool = $no_lobby_tp;
- if(bool == null) {
- bool = false;
- }
- return bool;
- }
- function minigame.setPlayerResetInCore(bool) {
- $no_core_reset = !bool;
- }
- function minigame.doPlayerResetInCore() {
- if($no_core_reset == null) {
- $no_core_reset = false;
- }
- return !$no_core_reset;
- }
- function minigame.setManualStart(bool) {
- $manual_start = bool;
- }
- function minigame.hasManualStart() {
- bool = $manual_start;
- if(bool == null) {
- bool = false;
- }
- return bool;
- }
- function minigame.setIndivStartCheck(bool) {
- $indiv_start_check = bool;
- }
- function minigame.hasIndivStartCheck() {
- bool = $indiv_start_check;
- if(bool == null) {
- bool = false;
- }
- return bool;
- }
- function minigame.setSpecificLobbyHandling(bool) {
- $specific_lobby_handling = bool;
- }
- function minigame.hasSpecificLobbyHandling() {
- bool = $specific_lobby_handling;
- if(bool == null) {
- bool = false;
- }
- return bool;
- }
- function minigame.setMinPlayers(amount) {
- $minplayers = amount;
- }
- function minigame.getMinPlayers() {
- return $minplayers;
- }
- function minigame.setMaxPlayers(amount) {
- $maxplayers = amount;
- }
- function minigame.getMaxPlayers() {
- return $maxplayers;
- }
- function minigame.isStarting() {
- return $starting;
- }
- function minigame.setStarting(bool) {
- $starting = bool;
- }
- function minigame.setSingleplayer() {
- $singleplayer = true;
- }
- function minigame.setMultiplayer() {
- $singleplayer = false;
- }
- function minigame.isSingleplayer() {
- return $singleplayer;
- }
- function minigame.isMultiplayer() {
- return !$singleplayer;
- }
- function minigame.waiting() {
- minigame.setStarting(false);
- $noticetime = minigame.getLobbyCounter();
- if(minigame.hasManualStart()) {
- minigame.speakAll($gamename, "Start process stopped.");
- return;
- }
- waitfor = minigame.getMinPlayers() - minigame.getPlayerAmount($script_id);
- if(waitfor == 1) {
- minigame.speakAll($gamename, string.concat("Waiting for §b", string.number(waitfor), " §rplayer."));
- return;
- }
- if(waitfor == 0) {
- minigame.speakAll($gamename, string.concat("Waiting for §b", string.number(waitfor), " §rplayers, but start conditions are not met."));
- return;
- }
- minigame.speakAll($gamename, string.concat("Waiting for §b", string.number(waitfor), " §rplayers."));
- }
- function minigame.canStart() {
- if(minigame.hasIndivStartCheck()) {
- return minigame.canStartIndiv();
- }
- player_list = minigame.getPlayers($script_id);
- p_amount = list.getSize(player_list);
- return p_amount >= minigame.getMinPlayers();
- }
- function minigame.initStart() {
- minigame.loadLobbyEvents();
- minigame.setupMultiplayer();
- }
- function minigame.clearItems(location, radius) {
- entity.removeAll("org.bukkit.entity.Item", location, radius);
- }
- function minigame.setTabName(player, game_tab, team_color) {
- if(team_color == null) {
- team_color = "§r";
- }
- player_name = player.getName(player);
- display_name = string.concat(game_tab, " §7| ", team_color, player_name);
- player.setDisplayName(player, text.new(display_name));
- }
- function minigame.loadLobbyEvents() {
- event.load("minigame_join");
- event.load("player_quit");
- event.load("player_giveup");
- event.load("block_break");
- event.load("block_place");
- event.load("block_click");
- event.load("entity_damage");
- event.load("custom_command");
- }
- function minigame.setupMultiplayer() {
- $noticetime = minigame.getLobbyCounter();
- minigame.setMultiplayer();
- minigame.setStarting(false);
- $sound_category_ambient = sound.getCategory("AMBIENT");
- $sound_category_player = sound.getCategory("PLAYERS");
- $join_sound = sound.get("BLOCK_NOTE_BLOCK_BASS");
- $pling_sound = sound.get("BLOCK_NOTE_BLOCK_PLING");
- }
- function minigame.setLastPos(player) {
- map.add(getScriptVar("lobbylastpos"), player.getUuid(player), entity.getLocation(player));
- }
- function minigame.getLastPos(player) {
- return map.getOrDefault(getScriptVar("lobbylastpos"), player.getUuid(player), world.getGamesSpawn());
- }
- function minigame.isStarted(sign_block) {
- return sign.getString(sign_block, 3) == "§bStarted";
- }
- function minigame.getSignLoc(sign_name) {
- return map.get(getScriptVar("gamesigns"), sign_name);
- }
- function minigame.term(script, gamesignloc) {
- setScriptVar("sign_loc", gamesignloc);
- script.callEvent("term_script");
- sign.ready(gamesignloc);
- script.term(script);
- }
- function minigame.speakAll(prefix, message) {
- iter = iterator(minigame.getPlayers($script_id));
- while(hasNext(iter)) {
- p_uuid = next(iter);
- p = player.get(p_uuid);
- msg.prefix(p, prefix, message);
- }
- }
- function minigame.msgAll(message) {
- iter = iterator(minigame.getPlayers($script_id));
- while(hasNext(iter)) {
- p_uuid = next(iter);
- p = player.get(p_uuid);
- if(p != null) {
- msg.string(p, message);
- }
- }
- }
- function minigame.displayAll(line, message) {
- iter = iterator(minigame.getPlayers($script_id));
- while(hasNext(iter)) {
- p_uuid = next(iter);
- p = player.get(p_uuid);
- sb.add(p, line, message);
- }
- }
- function minigame.titleAll(title, subtitle, fadeIn, show, fadeOut) {
- iter = iterator(minigame.getPlayers($script_id));
- while(hasNext(iter)) {
- p_uuid = next(iter);
- p = player.get(p_uuid);
- title.send(p, text.new(title), text.new(subtitle));
- }
- }
- function minigame.displayRemoveAll(line) {
- iter = iterator(minigame.getPlayers($script_id));
- while(hasNext(iter)) {
- p_uuid = next(iter);
- p = player.get(p_uuid);
- sb.remove(p, line);
- }
- }
- function minigame.displayClearAll() {
- iter = iterator(minigame.getPlayers($script_id));
- while(hasNext(iter)) {
- p_uuid = next(iter);
- p = player.get(p_uuid);
- sb.clearGame(p);
- }
- }
- function minigame.statsHeader(player, gamename, colorcode) {
- msg.string(player, string.concat("[", gamename, "§r] §r---= ", colorcode, "Statistic §r=---"));
- }
- function minigame.statsLine(player, colorcode, string, value) {
- msg.string(player, string.concat(colorcode, " -§r ", string, ": ", colorcode, value));
- }
- function getTeamWithLowestPeople(team_lists, numberofteams) {
- teamlist = map.get(team_lists, 0);
- lowest = list.getSize(teamlist);
- lowestteam = 0;
- for(i = 1; i < numberofteams; i++) {
- teamlist = map.get(team_lists, i);
- size = list.getSize(teamlist);
- if(size < lowest) {
- lowest = size;
- lowestteam = i;
- }
- }
- return lowestteam;
- }
- function minigame.getScriptId(script_or_id) {
- if(isDouble(script_or_id)) {
- return script_or_id;
- }
- return script.getId(script_or_id);
- }
- function minigame.kickPlayer(script_or_id, player) {
- script_id = minigame.getScriptId(script_or_id);
- resetplayer(player);
- player.tpGamesLobby(player);
- list = minigame.getPlayers(script_id);
- list.remove(list, player.getUuid(player));
- sign.players($gamesignloc, list.getSize(list), $maxplayers);
- set.remove(player.getMinigameIds(player), script_id);
- }
- function minigame.kickAllPlayers(script_or_id) {
- script_id = minigame.getScriptId(script_or_id);
- player_list = minigame.getPlayers(script_id);
- list = list.copy(player_list); //Copy list to preven concurrent modification
- iter = iterator(list);
- while(hasNext(iter)) {
- p = player.get(next(iter));
- if(p != null) {
- minigame.kickPlayer(script_id, p);
- }
- }
- }
- function minigame.getPlayerAmount(script_id) {
- list = minigame.getPlayers(script_id);
- return list.getSize(list);
- }
- function minigame.getPlayers(script_id) {
- map = getScriptVar("script_players");
- list = map.get(map, script_id);
- if(list == null) {
- list = list.new();
- map.add(map, script_id, list);
- }
- return list;
- }
- function minigame.setWon(player_or_id, game_short, amount) {
- config = playerdata.getGames(player_or_id);
- config.set(config, string.concat("won.", game_short), amount);
- config.saveAsync(config);
- }
- function minigame.getWon(player_or_id, game_short) {
- config = playerdata.getGames(player_or_id);
- return config.getDouble(config, string.concat("won.", game_short), 0);
- }
- function minigame.setPlayed(player_or_id, game_short, amount) {
- config = playerdata.getGames(player_or_id);
- config.set(config, string.concat("played.", game_short), amount);
- config.saveAsync(config);
- }
- function minigame.getPlayed(player_or_id, game_short) {
- config = playerdata.getGames(player_or_id);
- return config.getDouble(config, string.concat("played.", game_short), 0);
- }
- function minigame.addPlayed(player_or_id, game_short, amount) {
- config = playerdata.getGames(player_or_id);
- new_amount = config.getDouble(config, string.concat("played.", game_short), 0) + amount;
- config.set(config, string.concat("played.", game_short), new_amount);
- config.saveAsync(config);
- }
- //--------------------------------------------------
- //Player-Utils
- //--------------------------------------------------
- function player.tpGamesLobby(player) {
- modTimer.entityTeleport(player, minigame.getLastPos(player));
- inv = player.getInv(player);
- inv.setItem(inv, 0, item.create("COMPASS", 1, null, null));
- }
- function player.hasMinigameId(player, script_id) {
- if(player == null) {
- return false;
- }
- if(script_id == null) {
- return false;
- }
- set = player.getMinigameIds(player);
- return set.contains(set, script_id);
- }
- function resetplayer(player) {
- living.cleareffects(player);
- living.setHealth(player, 20);
- player.setHunger(player, 20);
- player.setSaturation(player, 5);
- player.clearInventory(player);
- player.setSpeed(player, 1);
- entity.setGravity(player, true);
- inv.close(player);
- money.display(player, money.get(player));
- player.setTabName(player);
- sb.clearGame(player);
- }
- //--------------------------------------------------
- //Ranking-Utils
- //--------------------------------------------------
- //Tabelle in Datenbank registrieren
- function ranking.register(rankingtable) {
- databank.workerExecute(databank.prepare(string.concat("CREATE TABLE IF NOT EXISTS ", rankingtable, " (player_id INT NOT NULL PRIMARY KEY, points INT NOT NULL, sec_points INT);")));
- }
- //Setzt die Rekord-Punkte eines Spielers
- function ranking.setPoints(rankingtable, player_or_id, points) {
- stmt = databank.prepare(string.concat("INSERT INTO ", rankingtable, " (points, player_id) VALUES (?,?) ON DUPLICATE KEY UPDATE points = ?;"), false);
- databank.setInt(stmt, 1, points);
- databank.setInt(stmt, 2, player.getValidId(player_or_id));
- databank.setInt(stmt, 3, points);
- databank.workerExecute(stmt);
- }
- //Setzt die primären und sekundären Rekord-Punkte eines Spielers
- function ranking.setSecPoints(rankingtable, player_or_id, points, sec_points) {
- stmt = databank.prepare(string.concat("INSERT INTO ", rankingtable, " (points, sec_points, player_id) VALUES (?,?,?) ON DUPLICATE KEY UPDATE points = ?, sec_points = ?;"), false);
- databank.setInt(stmt, 1, points);
- databank.setInt(stmt, 2, sec_points);
- databank.setInt(stmt, 3, player.getValidId(player_or_id));
- databank.setInt(stmt, 4, points);
- databank.setInt(stmt, 5, sec_points);
- databank.workerExecute(stmt);
- }
- //Gibt die gesamte Rangtabelle zurück. Liste mit Arrays
- function ranking.getArray(rankingtable, order, order2) {
- ranking_list = list.new();
- if(order2 == null) {
- stmt = databank.prepare(string.concat("SELECT player_id, points,sec_points FROM ", rankingtable, " ORDER BY points ", order, ";"));
- } else {
- stmt = databank.prepare(string.concat("SELECT player_id, points,sec_points FROM ", rankingtable, " ORDER BY points ", order, ", sec_points ", order2, ";"));
- }
- result = databank.execute(stmt);
- while(databank.next(result)) {
- a = array.new(3);
- a[0] = databank.getInt(result, 1); //player_id
- a[1] = databank.getInt(result, 2); //points
- a[2] = databank.getInt(result, 3); //sec_points
- list.add(ranking_list, a);
- }
- databank.close(result);
- databank.close(stmt);
- return ranking_list;
- }
- //Gibt Daten des Spieler von Platz n als Array zurück
- function ranking.getArrayFromRank(rankingtable, rank, order, order2) {
- ranking_list = ranking.getArray(rankingtable, order, order2);
- list_size = list.getSize(ranking_list);
- index = rank - 1;
- if(index >= list_size || index < 0) {
- return null;
- }
- a = list.getIndex(ranking_list, index);
- return a;
- }
- //Gibt den Spieler von Platz n zurück
- function ranking.getPlayerIdFromRank(rankingtable, rank, order, order2) {
- a = ranking.getArrayFromRank(rankingtable, rank, order, order2);
- if(a == null) {
- return -1;
- }
- return a[0];
- }
- //Gibt die Punkte von Platz n zurück
- function ranking.getPointsFromRank(rankingtable, rank, order, order2) {
- a = ranking.getArrayFromRank(rankingtable, rank, order, order2);
- if(a == null) {
- return -1;
- }
- return a[1];
- }
- //Gibt die Top 10 Spieler eines Spiels zurück
- function ranking.getTopTenList(rankingtable, order, order2) {
- toptenlist = list.new();
- ranking_list = ranking.getArray(rankingtable, order, order2);
- list_size = list.getSize(ranking_list);
- for(i = 0; i < list_size; i++) {
- list.add(toptenlist, list.getIndex(ranking_list, i));
- }
- return toptenlist;
- }
- //Gibt die Statistik eines Spiels zurück
- function ranking.getPlayerStats(player_id, rankingtable, order, order2) {
- ranking_list = ranking.getArray(rankingtable, order, order2);
- list_size = list.getSize(ranking_list);
- for(i = 0; i < list_size; i++) {
- a = list.getIndex(ranking_list, i);
- if(a[0] == player_id) {
- return a;
- }
- }
- return null;
- }
- //Gibt den Rang eines Spielers zurück
- function ranking.getPlayerRank(player_id, rankingtable, order, order2) {
- ranking_list = ranking.getArray(rankingtable, order, order2);
- list_size = list.getSize(ranking_list);
- for(i = 0; i < list_size; i++) {
- a = list.getIndex(ranking_list, i);
- if(a[0] == player_id) {
- return i + 1;
- }
- }
- return -1;
- }
- //Entfernt einen Spieler aus der Statistik
- function ranking.removePlayer(player_id, rankingtable, game_short) {
- stmt = databank.prepare(string.concat("DELETE FROM ", rankingtable, " WHERE player_id = ?;"));
- databank.setInt(stmt, 1, player_id);
- databank.workerExecute(stmt);
- if(game_short != null) {
- if(minigame.getWon(player_id, game_short) != 0) {
- minigame.setWon(player_id, game_short, 0);
- }
- if(minigame.getPlayed(player_id, game_short) != 0) {
- minigame.setPlayed(player_id, game_short, 0);
- }
- }
- }
- //--------------------------------------------------
- //Sign-Utils
- //--------------------------------------------------
- function sign.players(sign_block, amount, max) {
- if(!isBlock(sign_block)) {
- sign_block = block.get(sign_block);
- }
- sign.setString(sign_block, 2, string.concat(string.number(amount), "/", string.number(max)));
- }
- function sign.ready(sign_block) {
- if(!isBlock(sign_block)) {
- sign_block = block.get(sign_block);
- }
- sign.setString(sign_block, 3, "§2Ready");
- }
- function sign.started(sign_block) {
- if(!isBlock(sign_block)) {
- sign_block = block.get(sign_block);
- }
- sign.setString(sign_block, 3, "§bStarted");
- }
- function sign.closed(sign_block) {
- if(!isBlock(sign_block)) {
- sign_block = block.get(sign_block);
- }
- sign.setString(sign_block, 3, "§cClosed");
- }
- //--------------------------------------------------
- //SB-Utils
- //--------------------------------------------------
- function sb.clearGame(player) {
- for(i = 79; i < 100; i++) {
- sb.remove(player, i);
- }
- }
- function sb.clearGameAll() {
- iter = iterator(minigame.getPlayers($script_id));
- while(hasNext(iter)) {
- p_uuid = next(iter);
- p = player.get(p_uuid);
- sb.clearGame(p);
- }
- }
|