skypvp.sk 1.3.7

Added skypvp.sk 1.3.7
This commit is contained in:
ZorahM 2025-05-01 17:29:46 +00:00
commit 1d3ec94130

896
skypvp.sk Normal file
View File

@ -0,0 +1,896 @@
# === SkyPvP Skript ===
# Автор: Zorahm
# Описание: Управление инвентарем, сохранение купленных предметов и механика победы.
# Версия: 1.3.7
# === Плейсхолдеры ===
placeholderapi placeholder with the prefix "skript":
if the identifier is "kills":
set the result to "%{kills::%player's uuid%}%"
else if the identifier is "killstreak":
set the result to "%{killstreak::%player's uuid%}%"
else if the identifier is "winner":
set the result to "%{skypvp_winner}%"
else if the identifier is "alive":
set the result to "%size of {alive_players::*}%"
else if the identifier is "elo_rank":
set {_elo} to {elo::%player's uuid%}
set the result to get_elo_rank({_elo})
else if the identifier is "elo":
set {_elo} to {elo::%player%}
if {_elo} is not set:
set {_elo} to 100
set {elo::%player%} to 100
set the result to "%{_elo}%"
# === Режим "Хаотичные эффекты" ===
on script load:
set {effect_list::*} to "speed", "slowness", "haste", "mining_fatigue", "strength", "instant_health", "jump_boost", "nausea", "regeneration", "resistance", "fire_resistance", "water_breathing", "invisibility", "blindness", "night_vision", "hunger", "weakness", "poison", "health_boost", "absorption", "saturation", "glowing", "levitation", "luck", "unluck", "slow_falling", "conduit_power", "dolphins_grace", "bad_omen", "hero_of_the_village"
command /random_effects <text>:
permission: skypvp.admin
trigger:
if argument 1 is "on":
set {random_effects_active} to true
random_effect_loop()
else if argument 1 is "off":
delete {random_effects_active}
message "&c❌ Хаотичные эффекты отключены."
function random_effect_loop():
if {random_effects_active} is not set:
stop
set {_players::*} to all players
if size of {_players::*} > 0:
set {_randomPlayer} to random element out of {_players::*}
set {_randomEffect} to random element out of {effect_list::*}
# Генерация случайных параметров эффекта
set {_level} to random integer between 0 and 2 # Уровень в команде начинается с 0
set {_duration} to random integer between 1 and 15
set {_effectName} to get_effect_name({_randomEffect})
# Выдаем эффект игроку
execute console command "effect give %{_randomPlayer}% %{_randomEffect}% %{_duration}% %{_level}%"
message "&d✨ %{_randomPlayer}% получил эффект &b%{_effectName}% &7(%{_duration}% сек, уровень %{_level} + 1%)!" to all players # Исправлено!
# Ждем завершения эффекта
wait {_duration} * 20 ticks
random_effect_loop()
# === Список эффектов с переводами ===
function get_effect_name(effect: text) :: text:
set {_effects::speed} to "Скорость"
set {_effects::slowness} to "Медлительность"
set {_effects::haste} to "Ускорение копания"
set {_effects::mining_fatigue} to "Усталость"
set {_effects::strength} to "Сила"
set {_effects::instant_health} to "Мгновенное лечение"
set {_effects::instant_damage} to "Мгновенный урон"
set {_effects::jump_boost} to "Высокий прыжок"
set {_effects::nausea} to "Тошнота"
set {_effects::regeneration} to "Регенерация"
set {_effects::resistance} to "Сопротивление"
set {_effects::fire_resistance} to "Огнестойкость"
set {_effects::water_breathing} to "Подводное дыхание"
set {_effects::invisibility} to "Невидимость"
set {_effects::blindness} to "Слепота"
set {_effects::night_vision} to "Ночное зрение"
set {_effects::hunger} to "Голод"
set {_effects::weakness} to "Слабость"
set {_effects::poison} to "Отравление"
set {_effects::wither} to "Иссушение"
set {_effects::health_boost} to "Доп. здоровье"
set {_effects::absorption} to "Поглощение"
set {_effects::saturation} to "Насыщение"
set {_effects::glowing} to "Свечение"
set {_effects::levitation} to "Левитация"
set {_effects::luck} to "Удача"
set {_effects::unluck} to "Неудача"
set {_effects::slow_falling} to "Медленное падение"
set {_effects::conduit_power} to "Сила проводника"
set {_effects::dolphins_grace} to "Благодать дельфина"
set {_effects::bad_omen} to "Дурное знамение"
set {_effects::hero_of_the_village} to "Герой деревни"
return {_effects::%{_effect}%} if {_effects::%{_effect}%} is set else {_effect}
# === Очистка инвентаря при входе ===
on join:
wait 1 tick
clear player's inventory
set player's health to 20
set player's food level to 20
execute console command "tp %player% 269.5 118.0 135.5"
execute console command "gamemode adventure %player%"
#=======================
# 🛠️ КОМАНДЫ
#=======================
# =======================
# 🎮 Управление рейтингом Elo
# =======================
command /elo <text> <player> <integer>:
permission: skypvp.admin
trigger:
set {_action} to argument 1
set {_player} to argument 2
set {_amount} to argument 3
if {_action} != "give":
if {_action} != "take":
message "&c❌ Используйте: /elo give <игрок> <количество> или /elo take <игрок> <количество>" to sender
stop
if {_amount} <= 0:
message "&c❌ Количество должно быть больше 0!" to sender
stop
if {_action} = "give":
add {_amount} to {elo::%{_player}%}
message "&a✅ Вы выдали &e%{_amount}% &aElo игроку &b%{_player}%!" to sender
message "&6🏆 Вам добавлено &e%{_amount}% &6Elo! Новый рейтинг: &b%{elo::%{_player}%}%" to {_player}
else if {_action} = "take":
remove {_amount} from {elo::%{_player}%}
if {elo::%{_player}%} < 0:
set {elo::%{_player}%} to 0
message "&a✅ Вы сняли &e%{_amount}% &aElo у игрока &b%{_player}%!" to sender
message "&c⚠ У вас отняли &e%{_amount}% &cElo! Новый рейтинг: &b%{elo::%{_player}%}%" to {_player}
# ▸ Магазин ▸
command /shopitems_add <player> <text>:
trigger:
if argument 1 is not set:
message "&cОшибка: Не указан игрок!" to sender
stop
if argument 2 is not set:
message "&cОшибка: Не указан предмет!" to sender
stop
set {_item} to argument 2
add {_item} to {shopitems::%argument 1%::*}
message "&aДобавлено в список купленных: %{_item}%!" to argument 1
command /addshop <player> <text>:
permission: skypvp.shop
trigger:
set {_item} to argument 2
add {_item} to {shopitems::%argument 1%::*}
execute console command "give %argument 1% %{_item}%"
message "&aВы купили: %{_item}%!" to argument 1
# ▸ Управление игрой ▸
command /startgame:
permission: skypvp.start
trigger:
# Проверка: достаточно ли игроков?
if size of all players < 2:
message "&c❌ Ошибка: недостаточно игроков для начала игры!" to sender
stop
# Проверка: идет ли уже игра?
if {skypvp_winner} is not set:
message "&c❌ Игра уже запущена!" to sender
stop
# Очистка старых данных
clear {alive_players::*}
set {skypvp_winner} to "Нет"
# === Настройка Redstone для механик ===
execute console command "setblock 23 -55 52 minecraft:stone_pressure_plate"
execute console command "setblock 251 129 148 minecraft:redstone_wire" # Включение темноты
execute console command "setblock 23 -57 52 minecraft:redstone_wire"
execute console command "setblock 8 -56 83 minecraft:redstone_block"
execute console command "kill @e[type=minecraft:interaction]"
execute console command "setblock -13 -55 -13 minecraft:stone_pressure_plate"
# === Объявление начала игры ===
broadcast "&8━━━━━━━━━━━━━━━━━━━━━━━"
broadcast "&a🏆 &lНАЧАЛО ИГРЫ!"
broadcast "&7Игроки телепортированы на арену."
broadcast "&8━━━━━━━━━━━━━━━━━━━━━━━"
loop all players:
execute console command "tp %loop-player% 10 -54 13"
add loop-player to {alive_players::*}
set {round_kills::%loop-player%} to 0
set {round_elo::%loop-player%} to 0
clear loop-player's inventory
set loop-player's health to 20
set loop-player's food level to 20
apply damage resistance 5 to loop-player for 5 seconds
execute console command "effect give @a minecraft:invisibility 5 0 true"
# === Активация PVP ===
wait 5 seconds
execute console command "setblock 7 -57 82 minecraft:repeater[facing=east]"
set {pvp_enabled} to true
broadcast " "
broadcast "&c🔥 &lPVP ВКЛЮЧЕНО!"
broadcast " "
# ==============================
# 💀 ДРОП С УБИЙСТВ
# ==============================
on death of player:
set {_killer} to attacker
if {_killer} is set:
# 🍏 50% шанс - Золотое яблоко
if chance of 50%:
drop 1 golden apple at victim's location
message "&e🍏 Вам выпало &6Золотое яблоко!" to {_killer}
# ⚡ 30% шанс - Жемчуг эндера
if chance of 30%:
drop 1 ender pearl at victim's location
message "&b⚡ Вам выпал &3Жемчуг эндера!" to {_killer}
# 🏹 3% шанс - Улучшенный лук (Power II, Infinity)
if chance of 3%:
set {_bow} to a bow
enchant {_bow} with power 2
enchant {_bow} with infinity 1
give {_killer} {_bow}
message "&9🏹 Вам выпал &bУлучшенный лук (Power II, Infinity)!" to {_killer}
# 🍏 5% шанс - Зачарованное золотое яблоко
if chance of 5%:
drop 1 enchanted golden apple at victim's location
message "&6✨ Вам выпало &eЗачарованное золотое яблоко!" to {_killer}
# === Управление PVP ===
on script load:
set {pvp_enabled} to false # PVP отключено по умолчанию
on damage:
if attacker is a player:
if victim is a player:
if {pvp_enabled} is false:
cancel event
send "&c⛔ PVP отключен! Дождитесь начала игры." to attacker
stop
# ▸ Статистика ▸
command /stats [<player>]:
trigger:
set {_target} to argument 1
if {_target} is not set:
set {_target} to player
# Устанавливаем значения по умолчанию
if {elo::%{_target}%} is not set:
set {elo::%{_target}%} to 100
if {prestige::%{_target}%} is not set:
set {prestige::%{_target}%} to 0
if {wins::%{_target}%} is not set:
set {wins::%{_target}%} to 0
if {losses::%{_target}%} is not set:
set {losses::%{_target}%} to 0
if {kills::%{_target}%} is not set:
set {kills::%{_target}%} to 0
if {deaths::%{_target}%} is not set:
set {deaths::%{_target}%} to 0
# Определяем K/D
set {_kills} to {kills::%{_target}%}
set {_deaths} to {deaths::%{_target}%}
if {_deaths} is 0:
set {_kd} to {_kills} # Если смертей нет, K/D = количеству убийств
else:
set {_kd} to {_kills} / {_deaths}
# Проверяем, является ли {_kd} числом
if {_kd} is a number:
set {_kd} to round({_kd}, 2)
else:
set {_kd} to 0
# Определяем PvP-рейтинг
set {_elo} to {elo::%{_target}%}
set {_rank} to get_elo_rank({_elo})
# Получаем баланс через PlaceholderAPI
set {_balance} to placeholder "vault_eco_balance_fixed_%{_target}%"
# Выводим статистику
send "&8━━━━━━━━━━━━━━━━━━━━━━━"
send "&6📊 Статистика игрока: &e%{_target}%"
send "&8━━━━━━━━━━━━━━━━━━━━━━━"
send "&f▸ Престиж: &e%{prestige::%{_target}%}%"
send "&f▸ Победы: &a%{wins::%{_target}%}%"
send "&f▸ Поражения: &c%{losses::%{_target}%}%"
send "&f▸ Убийства: &e%{_kills}%"
send "&f▸ Смерти: &c%{_deaths}%"
send "&f▸ K/D: &6%{_kd}%"
send "&f▸ Баланс: &6%{_target}'s balance%"
send "&f▸ PvP-рейтинг: &b%{_elo}% &7(%{_rank}%)"
send "&8━━━━━━━━━━━━━━━━━━━━━━━"
# ▸ Ставки ▸
on script load:
set {bet_min} to 10 # Минимальная ставка
clear {bet::*} # Очистка прошлых ставок
clear {bet_pool} # Очистка общего пула ставок
command /bet [<integer>] [<text>]:
trigger:
if argument 1 is not set:
send "&c❌ Использование: /bet <сумма> [игрок]" to player
send "&7📌 Например: &e/bet 100 &fили &e/bet 100 Steve" to player
stop
set {_amount} to argument 1
set {_targetName} to argument 2 # Сохраняем имя как текст
if {_amount} is not a number:
send "&c❌ Неверный формат! Введите число, например: &e/bet 100" to player
stop
if {_amount} < {bet_min}:
send "&c❌ Минимальная ставка: %{bet_min}% монет!" to player
stop
if {_amount} > player's balance:
send "&c❌ У вас недостаточно монет для ставки!" to player
stop
if {bet::%player's uuid%} is set:
send "&c❌ Вы уже сделали ставку! Дождитесь конца игры." to player
stop
# Если игрок не указан, ставим на себя
if {_targetName} is not set:
set {_target} to player
else:
set {_target} to "%{_targetName}%" parsed as player # Парсим имя в объект игрока
# Проверяем, существует ли игрок
if {_target} is not a player:
send "&c❌ Игрок &e%{_targetName}% &cне найден!" to player
stop
# Проверяем, участвует ли целевой игрок в игре
set {_found} to false
loop {alive_players::*}:
if loop-value is {_target}:
set {_found} to true
stop loop
if {_found} is false:
send "&c❌ Нельзя ставить на игрока, который не участвует в игре!" to player
stop
# Запись ставки
remove {_amount} from player's balance
set {bet::%player's uuid%} to {_amount}
set {bet_target::%player's uuid%} to {_target}
add {_amount} to {bet_pool}
send "&a✅ Вы поставили &e%{_amount}% монет &aна победу игрока &b%name of {_target}%!" to player
# 📌 Обработка ставок по завершении игры
function process_bets(winner: player):
loop {bet::*}:
set {_uuid} to loop-index
set {_betAmount} to loop-value
set {_betTarget} to {bet_target::%{_uuid}%}
# Поиск игрока, сделавшего ставку
loop all players:
if uuid of loop-player is {_uuid}:
set {_player} to loop-player
stop loop
# Если игрок не найден, удаляем ставку
if {_player} is not set:
delete {bet::%{_uuid}%}
delete {bet_target::%{_uuid}%}
continue loop
# Проверяем, выиграл ли тот, на кого ставил игрок
if {_betTarget} is {_winner}:
set {_winAmount} to {_betAmount} * 2
add {_winAmount} to {_player}'s balance
send "&a🎉 Ваша ставка на &b%name of {_betTarget}% &aсыграла! Вы выиграли &e%{_winAmount}% монет!" to {_player}
else:
send "&c☠ Ваша ставка на &b%name of {_betTarget}% &cпроиграна. Удачи в следующем раунде!" to {_player}
# Удаляем ставки после обработки
delete {bet::%{_uuid}%}
delete {bet_target::%{_uuid}%}
#=======================
# 🎮 ИГРОВЫЕ СОБЫТИЯ
#=======================
# ▸ Обработка смерти ▸
on death of player:
set {_player} to victim
set {_killer} to attacker
# Переводим убитого игрока в режим наблюдателя
execute console command "gamemode spectator %{_player}%"
wait 1 second
execute console command "tp %{_player}% 10 -50 13"
remove {_player} from {alive_players::*}
# Сброс killstreak при смерти
set {killstreak::%{_player}%} to 0
# Если есть убийца, начисляем награды
if {_killer} is set:
# Рассчитываем множитель престижа
set {_multiplier} to get_prestige_multiplier(name of {_killer})
# Рассчитываем награды с учетом престижа
set {_rewardMoney} to round(25 * {_multiplier})
set {_rewardElo} to round(10 * {_multiplier})
set {_eloPenalty} to 5 # Убитому фиксированное снижение Elo
add 1 to {kills::%{_killer}%} # Общие убийства
add 1 to {round_kills::%{_killer}%} # Убийства за раунд
add {_rewardElo} to {elo::%{_killer}%} # Elo за раунд
execute console command "eco add %{_killer}% %{_rewardMoney}%" # Начисление монет
message " " to {_killer}
message "&a⚔ Вы убили &e%{_player}%! (&e%{round_kills::%{_killer}%}%)" to {_killer}
message "&f💰 Награда: &a+%{_rewardMoney}% монет | Elo: &a+%{_rewardElo}%" to {_killer}
message " " to {_killer}
# Если убитый игрок есть
if {_player} is set:
message "&c☠ Вы были убиты!" to {_player}
# Проверяем, остался ли один игрок
set {_alive} to size of {alive_players::*}
if {_alive} = 1:
loop {alive_players::*}:
set {_winner} to loop-value
process_bets({_winner})
execute console command "border_set 1000"
set {skypvp_winner} to {_winner} # Сохраняем объект игрока
add 1 to {wins::%{_winner}%}
# Рассчитываем награды победителя с учетом престижа
set {_winMoney} to round(100 * get_prestige_multiplier(name of {_winner}))
execute console command "eco add %{_winner}% %{_winMoney}%"
execute console command "elo give %{_winner}% 15"
execute console command "clone 56 240 -46 -50 259 90 -50 -64 -46" # Клон
# 🏆 Объявляем победителя красиво!
broadcast "&8━━━━━━━━━━━━━━━━━━━━━━━"
broadcast "&6🏆 ПОБЕДИТЕЛЬ &8➜ &a%name of {_winner}%!"
broadcast "&7Статистика за раунд:"
broadcast "&f⚔ Убийства: &e%{round_kills::%{_winner}%}% &7(Всего: %{kills::%{_winner}%}%)"
broadcast "&b🔷 Elo: &a+15 &7(Текущий: %{elo::%{_winner}%}%)"
broadcast "&f💰 Награда за победу: &a+%{_winMoney}% монет"
broadcast "&8━━━━━━━━━━━━━━━━━━━━━━━"
# Телепортируем всех в лобби
loop all players:
execute console command "gamemode adventure %loop-player%"
execute console command "effect clear %loop-player%"
clear loop-player's inventory
set loop-player's health to 20
set loop-player's food level to 20
execute console command "tp @a 269.5 118.0 135.5"
execute console command "random_effects off"
set {pvp_enabled} to false
wait 2 seconds
execute console command "setblock 249 133 142 minecraft:redstone_block"
# ▸ Подсчет убийств, Killstreak и выдача наград ▸
on death of player:
set {_killer} to attacker
if {_killer} is set:
set {_multiplier} to get_prestige_multiplier({_killer})
# Увеличиваем серию убийств
add 1 to {killstreak::%{_killer}%}
function get_elo_rank(elo: integer) :: text:
if {_elo} >= 2500:
return "&6👑 Легенда"
if {_elo} >= 2200:
return "&c🔥 Грандмастер"
if {_elo} >= 1900:
return "&4💀 Мастер"
if {_elo} >= 1600:
return "&e⚔ Ветеран"
if {_elo} >= 1300:
return "&b🥇 Эксперт"
if {_elo} >= 1100:
return "&3🥈 Опытный"
if {_elo} >= 900:
return "&a🎖 Боец"
if {_elo} >= 700:
return "&2🏹 Ученик"
if {_elo} >= 500:
return "&7🥉 Новичок"
return "&d🐍 Бездушный"
#=======================
# 📜 ПОМОЩЬ
#=======================
# Команда для игроков
command /help:
trigger:
send "&8━━━━━━━━━━━━━━━━━━━━━━━"
send "&6📖 SkyPvP | Помощь"
send "&7Здесь вы найдете основные команды и механику игры!"
send "&8━━━━━━━━━━━━━━━━━━━━━━━"
send "&a⚔ Основные команды:"
send "&7- &e/stats &8- &fВаша статистика (убийства, ELO, баланс)"
send "&7- &e/bet <сумма> [игрок] &8- &fСтавка на свою или чужую победу"
send "&7- &e/ranks &8- &fПосмотреть информацию по рангам"
send "&7- &e/msg <ник> <сообщение> &8- &fЛичное сообщение игроку"
send "&7- &e/report <ник> <причина> &8- &fПожаловаться на игрока"
send "&8━━━━━━━━━━━━━━━━━━━━━━━"
send "&a🛡 Механики игры:"
send "&7- &fЗа убийства вы получаете &6ELO &7и &eмонеты"
send "&7- &fСтавки удваиваются, если выбранный вами игрок победил"
send "&7- &fМожно ставить не только на себя, но и на других игроков!"
send "&7- &fПоследний выживший &aпобеждает &7и получает бонусы!"
send "&8━━━━━━━━━━━━━━━━━━━━━━━"
send "&b💡 Советы:"
send "&7- Проверяйте свой баланс командой &e/balance или в скорборде справа"
send "&7- Остерегайтесь ловушек и хитрых игроков!"
send "&8━━━━━━━━━━━━━━━━━━━━━━━"
# Команда для администраторов
command /help-admin:
permission: skypvp.admin
trigger:
message "&8━━━━━━━━━━━━━━━━━━━━━━━"
message "&c⚙ SkyPvP | Админ-команды"
message "&7Команды для управления игрой, экономикой и игроками."
message "&8━━━━━━━━━━━━━━━━━━━━━━━"
message "&c🎮 Управление игрой:"
message "&7- &e/startgame &8- &fЗапустить новую игру"
message "&7- &e/random_effects on/off &8- &fВключить/выключить хаотичные эффекты"
message "&8━━━━━━━━━━━━━━━━━━━━━━━"
message "&c🌍 Управление границей:"
message "&7- &e/border_set <размер> &8- &fУстановить размер границы (в блоках)"
message "&7- &e/border_shrink <размер> <время> &8- &fСжать границу до указанного размера за указанное время (в секундах)"
message "&7- &e/border_stop &8- &fОстановить сужение границы"
message "&7- &e/border_reset &8- &fСбросить границу до стандартного размера (10000 блоков)"
message "&8━━━━━━━━━━━━━━━━━━━━━━━"
message "&c📊 Управление статистикой:"
message "&7- &e/reset_all <игрок> &8- &fПолный сброс статистики игрока"
message "&7- &e/elo give/take <игрок> <сумма> &8- &fИзменить Elo игрока"
message "&8━━━━━━━━━━━━━━━━━━━━━━━"
message "&c💰 Управление экономикой:"
message "&7- &e/eco give/take/set <игрок> <сумма> &8- &fВыдать, забрать или установить баланс"
message "&7- &e/shopitems_add <игрок> <предмет> &8- &fДобавить предмет игроку в магазин"
message "&8━━━━━━━━━━━━━━━━━━━━━━━"
message "&c📌 Дополнительно:"
message "&7- &e/sk reload skypvp.sk &8- &fПерезагрузить скрипт SkyPvP"
message "&7- &e/checkplayer <игрок> &8- &fПроверить информацию об игроке"
message "&8━━━━━━━━━━━━━━━━━━━━━━━"
message "&7⚠ &cБудьте осторожны при использовании админ-команд!"
message "&8━━━━━━━━━━━━━━━━━━━━━━━"
#=======================
# 🌍 УПРАВЛЕНИЕ ГРАНИЦЕЙ
#=======================
# Установка стандартных параметров границы
on script load:
if {border_radius} is not set:
set {border_radius} to 10000
if {border_center} is not set:
set {border_center} to location(0, 64, 0) # Центр карты
# Сброс границы (возвращение к стандартному размеру)
command /border_reset:
permission: skypvp.admin
trigger:
if {border_active} is not set:
message "&c🔴 Граница уже отключена!" to sender
stop
delete {border_active}
set {border_radius} to 10000
execute console command "worldborder set 10000"
message "&a✅ Граница сброшена! Установлен стандартный размер (10000 блоков)." to all players
# Принудительная остановка сужения зоны
command /border_stop:
permission: skypvp.admin
trigger:
if {border_active} is not set:
message "&c⚠ Сужение зоны уже отключено!" to sender
stop
delete {border_active}
execute console command "worldborder set %{border_radius}%"
message "&c⛔ Сужение зоны остановлено!" to all players
# Установка границы вручную
command /border_set <integer>:
permission: skypvp.admin
trigger:
set {_new_radius} to argument 1
if {_new_radius} < 10:
message "&c⚠ Минимальный размер границы - 10 блоков!" to sender
stop
set {border_radius} to {_new_radius}
execute console command "worldborder set %{border_radius}%"
message "&a🌍 Граница установлена на &e%{border_radius}% &aблоков!" to all players
# Запуск автоматического сужения границы
command /border_shrink <integer> <integer>:
permission: skypvp.admin
trigger:
set {_new_radius} to argument 1
set {_time} to argument 2
if {_new_radius} < 10:
message "&c⚠ Минимальный размер границы - 10 блоков!" to sender
stop
if {_time} < 1:
message "&c⚠ Время сужения должно быть больше 1 секунды!" to sender
stop
set {border_active} to true
message "&e⚠ Внимание! Граница начнёт сужаться до &c%{_new_radius}% &eблоков за &b%{_time}% секунд!" to all players
execute console command "worldborder set %{_new_radius}% %{_time}%"
wait {_time} * 20 ticks
delete {border_active}
message "&c⚠ Граница достигла нового размера!" to all players
# Центр границы (по умолчанию 0,64,0)
on script load:
set {border_center} to location(9, -54, 12) # Замените на ваш центр
set {border_radius} to 10000
command /json_test:
trigger:
json("%player%", "&6✨ Нажми сюда! ||cmd:/ping ||ttp:&eПроверка JSON!")
# 📌 Полный сброс статистики игрока
command /reset_all <player>:
permission: skypvp.admin
trigger:
set {_target} to argument 1
# Проверяем, указан ли игрок
if {_target} is not set:
message "&c❌ Ошибка: укажите игрока!" to sender
stop
# Сбрасываем всю статистику
set {kills::%{_target}%} to 0
set {killstreak::%{_target}%} to 0
set {elo::%{_target}%} to 100
set {wins::%{_target}%} to 0
set {losses::%{_target}%} to 0
set {prestige::%{_target}%} to 0
# Сбрасываем достижения
delete {achievements::%{_target}%::*}
# Обнуляем деньги через Vault
execute console command "eco set %{_target}% 0"
# Сообщение об успешном сбросе
message "&a✔ Вся статистика и достижения игрока &e%{_target}% &aбыли сброшены!" to sender
message "&7⚠ Ваши данные и достижения были обнулены администратором!" to {_target}
command /ranks:
trigger:
set {_elo} to {elo::%player%}
set {_rank} to get_elo_rank({_elo}) # Получаем текущий ранг игрока
send "&8━━━━━━━━━━━━━━━━━━━━━━━"
send "&6🎖 РАНГИ ИГРОКОВ:"
send "&6👑 Легенда &8➟ &7От 2500 Elo"
send "&c🔥 Грандмастер &8➟ &7От 2200 Elo"
send "&4💀 Мастер &8➟ &7От 1900 Elo"
send "&e⚔ Ветеран &8➟ &7От 1600 Elo"
send "&b🥇 Эксперт &8➟ &7От 1300 Elo"
send "&3🥈 Опытный &8➟ &7От 1100 Elo"
send "&a🎖 Боец &8➟ &7От 900 Elo"
send "&2🏹 Ученик &8➟ &7От 700 Elo"
send "&7🥉 Новичок &8➟ &7От 500 Elo"
send "&d🐍 Бездушный &8➟ &7Менее 500 Elo"
send "&8━━━━━━━━━━━━━━━━━━━━━━━"
send "&fВаш текущий ранг: %{_rank}% &8(%{_elo}% Elo)"
# ==============================
# 🏆 ДОСТИЖЕНИЯ
# ==============================
import:
java.util.ArrayList
# ✅ Завершение достижения
function complete_achievement(p: player, achievement: text):
if {achievements::%{_p}%::*} contains {_achievement}:
stop
add {_achievement} to {achievements::%{_p}%::*}
message "&a🎉 Вы завершили достижение: &e%{_achievement}%!" to {_p}
# Выдача наград
set {_rewardMoney} to 150
set {_rewardElo} to 10
execute console command "eco add %{_p}% %{_rewardMoney}%"
add {_rewardElo} to {elo::%{_p}%}
message "&6💰 +%{_rewardMoney}% монет | ⚡ +%{_rewardElo}% Elo" to {_p}
# 🕵️‍♂️ Проверка и присвоение достижений
on death of player:
set {_killer} to attacker
if {_killer} is set:
# Первое убийство
if {kills::%{_killer}%} = 1:
complete_achievement({_killer}, "Первое убийство")
# Серия из 5 убийств
if {killstreak::%{_killer}%} = 5:
complete_achievement({_killer}, "Серия из 5 убийств")
# Killstreak x10
if {killstreak::%{_killer}%} = 10:
complete_achievement({_killer}, "Серия из 10 убийств")
# Проверка "Смертельный выстрел" (убийство стрелой)
if victim's last damage cause is projectile:
complete_achievement({_killer}, "Смертельный выстрел")
on damage:
set {_attacker} to attacker
if {_attacker} is a player:
if {_attacker}'s health <= 2: # 4 HP = 2 сердца
wait 30 seconds
if {_attacker}'s health > 0:
complete_achievement({_attacker}, "Выживание с половиной сердца 30 сек.")
# 📜 Команда для просмотра достижений
command /achievements [<text>]: # <text>, чтобы передавать имя как строку
trigger:
if arg-1 is set:
set {_p} to arg-1 parsed as offlineplayer
if {_p} is not set:
send "&c⚠ Ошибка: Игрок &e%arg-1% &cне найден. &7Проверьте имя и попробуйте снова!" to sender
stop
else:
set {_p} to player
set {_allAchievements::*} to define_achievements()
set {_completedAchievements::*} to {achievements::%{_p}%::*}
set {_completed} to size of {_completedAchievements::*}
set {_total} to size of {_allAchievements::*}
set {_progress} to round({_completed} / {_total} * 100, 1)
send "&8━━━━━━━━━━━━━━━━━━━━━━━"
send "&6🏆 Достижения игрока: &e%{_p}%"
send "&8━━━━━━━━━━━━━━━━━━━━━━━"
loop {_allAchievements::*}:
set {_achievement} to loop-value
if {_completedAchievements::*} contains {_achievement}:
send "&a✔ &7%{_achievement}%" to sender
else:
send "&c✘ &7%{_achievement}%" to sender
send "&8━━━━━━━━━━━━━━━━━━━━━━━"
# Определение всех достижений
function define_achievements() :: texts:
return "Первое убийство", "Серия из 5 убийств", "Серия из 10 убийств", "Смертельный выстрел", "Выживание с половиной сердца 30 сек."
# ==============================
# 🎖️ ПРЕСТИЖ-СИСТЕМА v3.0
# ==============================
# ▸ Функция получения множителя престижа ▸
function get_prestige_multiplier(p: text) :: number:
set {_prestige} to {prestige::%{_p}%} if {prestige::%{_p}%} is set else 0
set {_multiplier} to 1 + (0.1 * {_prestige})
if {_multiplier} > 2:
set {_multiplier} to 2 # Ограничение на максимум x2
return {_multiplier}
function get_prestige_format(p: text) :: text:
set {_prestige} to {prestige::%{_p}%} if {prestige::%{_p}%} is set else 0
set {_format} to "&e"
loop {_prestige} times:
set {_format} to "%{_format}%★"
return {_format}
# ▸ Команда для перехода на престиж ▸
command /prestige:
trigger:
if {prestige::%player%} is not set:
set {prestige::%player%} to 0
if {elo::%player%} < 2500:
message "&c❌ У вас недостаточно ELO для перехода на престиж! Минимум: &e2500 ELO."
stop
if {prestige::%player%} >= 10:
message "&c❌ Вы уже находитесь на максимальном престиже (10)!"
stop
if {prestige_confirm::%player%} is set:
message "&c⏳ Вы уже запрашивали переход! Подтвердите командой &e/prestige_confirm"
stop
set {prestige_confirm::%player%} to true
set {_next_prestige} to {prestige::%player%} + 1
set {_bonus} to {_next_prestige} * 10
message "&6⚡ Вы уверены, что хотите перейти на новый престиж? Это действие:"
message "&7 - &cСбросит ваши деньги, убийства и текущие достижения."
message "&7 - &aУвеличит ваш престиж &7(&e%{prestige::%player%}% ➝ %{_next_prestige}%&7 ★)."
message "&7 - &bДаст бонус к монетам: &e+%{_bonus}%."
message "&eЧтобы подтвердить, напишите: &a/prestige_confirm"
wait 30 seconds
delete {prestige_confirm::%player%}
message "&c❌ Время на подтверждение истекло!" to player
# ▸ Подтверждение перехода ▸
command /prestige_confirm:
trigger:
if {prestige_confirm::%player%} is not set:
message "&c❌ У вас нет активного запроса на переход на престиж!"
stop
add 1 to {prestige::%player%}
set {elo::%player%} to 100
set {kills::%player%} to 0
set {losses::%player%} to 0
set {killstreak::%player%} to 0
clear {achievements::%player%::*}
execute console command "eco set %player% 0"
set {_format} to get_prestige_format("%player%")
set {_bonus} to {prestige::%player%} * 10
broadcast "&6⚡ &e%player% &aперешёл на престиж &e%{prestige::%player%}% &7%{_format}%!"
message "&a🎉 Поздравляем! Ваш престиж теперь: &e%{prestige::%player%}% &7%{_format}%."
message "&7Теперь вы получаете &e+%{_bonus}% &7больше монет!"
delete {prestige_confirm::%player%}
# ▸ Информация о престижах ▸
command /prestige_info:
trigger:
set {_format} to get_prestige_format("%player%")
set {_multiplier} to get_prestige_multiplier("%player%")
message "&8━━━━━━━━━━━━━━━━━━━━━━━"
message "&6🎖 Ваш текущий престиж: &e%{prestige::%player%}% &7%{_format}%"
message "&7Бонус к монетам: &e+%{_multiplier}%"
message "&8━━━━━━━━━━━━━━━━━━━━━━━"