skypvp/skypvp.sk
ZorahM 1d3ec94130 skypvp.sk 1.3.7
Added skypvp.sk 1.3.7
2025-05-01 17:29:46 +00:00

896 lines
41 KiB
Plaintext
Raw Permalink Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# === 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━━━━━━━━━━━━━━━━━━━━━━━"