Свой сервер

Мардер Мистери в Майнкрафте

Датапак Murder Mystery для Minecraft 1.21.9 — 26.3: среди игроков — убийца с ножом, у детектива лук, мирные прячутся и собирают золото. Карта — любая: ваша постройка, деревня или лес. Раунд начинает любой игрок, нужно хотя бы трое.

Карта

Поле вокруг центра, блоков

Центр — 0 0 мира. Играть в другом месте — встаньте там и напишите /function murder:here. На время раунда граница мира — квадрат поля.

Раунд

Время у убийцы

Слиток падает раз в 3 с — у мест появления или в случайной точке поля. 10 слитков у мирного — лук со стрелой.

Роли

Датапак · 1.21.9 — 26.3
  • Убийца. Нож — через 10 с после старта, убивает с одного удара. Цель — убить всех до конца таймера.
  • Детектив. Лук со стрелой, новая — через 5 с после выстрела. Цель — вычислить убийцу и застрелить.
  • Мирные. Прятаться и следить. 10 слитков золота — лук и стрела.
Игроков
от 3
Поле
49 × 49
Раунд
5 мин

Начать раунд — любой игрок в лобби

/trigger start

Место появления там, где стоите (оператор)

/function murder:spot
Скачать датапак
Что внутри архива — 37 файлов

data/minecraft/tags/function/load.json

Тег load: игра зовёт эти функции при загрузке мира и после /reload.

{
  "values": [
    "murder:load"
  ]
}

data/minecraft/tags/function/tick.json

Тег tick: эти функции идут каждый тик — 20 раз в секунду.

{
  "values": [
    "murder:tick"
  ]
}

data/murder/function/place.mcfunction

Карта 49 × 49 вокруг центра — в загрузку.

execute at @e[type=marker,tag=murder_center,limit=1] run forceload add ~-24 ~-24 ~24 ~24
execute at @e[type=marker,tag=murder_center,limit=1] run setworldspawn ~ ~ ~

data/murder/function/timer/start.mcfunction

Старт отсчёта: 300 с полосой босса.

bossbar remove murder:timer
bossbar add murder:timer {"text":"До победы мирных"}
bossbar set murder:timer color green
bossbar set murder:timer max 300
scoreboard players set #timer murder 300
function murder:timer/second

data/murder/function/timer/second.mcfunction

Раз в секунду: полоса и надпись «мм:сс», по нулю — конец.

execute if score #timer murder matches ..0 run return run function murder:timer/end
bossbar set murder:timer players @a
execute store result bossbar murder:timer value run scoreboard players get #timer murder
scoreboard players operation #m murder = #timer murder
scoreboard players operation #s murder = #timer murder
scoreboard players set #60 murder 60
scoreboard players operation #m murder /= #60 murder
scoreboard players operation #s murder %= #60 murder
execute if score #s murder matches 10.. run bossbar set murder:timer name ["",{"text":"До победы мирных "},{"score":{"name":"#m","objective":"murder"}},{"text":":"},{"score":{"name":"#s","objective":"murder"}}]
execute if score #s murder matches ..9 run bossbar set murder:timer name ["",{"text":"До победы мирных "},{"score":{"name":"#m","objective":"murder"}},{"text":":0"},{"score":{"name":"#s","objective":"murder"}}]
scoreboard players remove #timer murder 1
schedule function murder:timer/second 1s

data/murder/function/timer/end.mcfunction

Время вышло: полосу убрать, дальше — своё.

bossbar remove murder:timer
function murder:time

data/murder/function/timer/stop.mcfunction

Остановить отсчёт.

schedule clear murder:timer/second
bossbar remove murder:timer

data/murder/function/time.mcfunction

Время вышло — мирные победили.

execute unless score #state murder matches 1 run return 0
scoreboard players set #winner murder 1
function murder:win

data/murder/function/knife.mcfunction

Через 10 с после старта — нож убийце.

execute unless score #state murder matches 1 run return 0
give @a[tag=murder_alive,tag=murder_killer] minecraft:iron_sword[minecraft:custom_name={"text":"Нож","color":"red","italic":false},minecraft:custom_data={"murder":true},minecraft:unbreakable={},minecraft:attribute_modifiers=[{"type":"minecraft:attack_damage","id":"murder:knife","amount":100,"operation":"add_value","slot":"mainhand"}]]
title @a[tag=murder_alive,tag=murder_killer] actionbar {"text":"Нож у вас","color":"red"}

data/murder/function/arm.mcfunction

Лук детектива и стрела.

give @s minecraft:bow[minecraft:custom_name={"text":"Лук детектива","color":"aqua","italic":false},minecraft:custom_data={"murder":true},minecraft:unbreakable={}]
give @s minecraft:tipped_arrow[minecraft:custom_data={"murder":true},minecraft:custom_name={"text":"Стрела","italic":false},minecraft:potion_contents={"custom_effects":[{"id":"minecraft:instant_damage","amplifier":4,"duration":1}]}]
tag @s add murder_bow

data/murder/function/shot.mcfunction

Мирный убил мирного — погибает сам.

scoreboard players reset @s murder_kills
execute unless entity @a[tag=murder_alive,tag=murder_killer] run return 0
tellraw @a ["",{"selector":"@s","color":"red"},{"text":" застрелил мирного жителя и погибает сам."}]
kill @s

data/murder/function/reload.mcfunction

Без стрелы — через 5 с новая.

scoreboard players add @s murder_reload 1
execute if score @s murder_reload matches 100.. run function murder:reload/arrow

data/murder/function/reload/arrow.mcfunction

Новая стрела.

scoreboard players reset @s murder_reload
give @s minecraft:tipped_arrow[minecraft:custom_data={"murder":true},minecraft:custom_name={"text":"Стрела","italic":false},minecraft:potion_contents={"custom_effects":[{"id":"minecraft:instant_damage","amplifier":4,"duration":1}]}]
title @s actionbar {"text":"Стрела готова","color":"aqua"}

data/murder/function/pick.mcfunction

Мирный рядом с луком на земле — подобрал.

execute as @a[tag=murder_alive,tag=!murder_killer,distance=..1.5,sort=nearest,limit=1] run function murder:pick/take
kill @s

data/murder/function/pick/take.mcfunction

Лук детектива — новому хозяину, стрелы снова сами.

function murder:arm
tag @s add murder_reload
tellraw @a {"text":"Лук детектива подобран.","color":"aqua"}

data/murder/function/buy.mcfunction

10 слитков: лук и стрела, у кого лук есть — стрела.

clear @s minecraft:gold_ingot 10
execute if entity @s[tag=murder_bow] run return run give @s minecraft:tipped_arrow[minecraft:custom_data={"murder":true},minecraft:custom_name={"text":"Стрела","italic":false},minecraft:potion_contents={"custom_effects":[{"id":"minecraft:instant_damage","amplifier":4,"duration":1}]}]
give @s minecraft:bow[minecraft:custom_name={"text":"Лук","color":"yellow","italic":false},minecraft:custom_data={"murder":true},minecraft:unbreakable={}]
give @s minecraft:tipped_arrow[minecraft:custom_data={"murder":true},minecraft:custom_name={"text":"Стрела","italic":false},minecraft:potion_contents={"custom_effects":[{"id":"minecraft:instant_damage","amplifier":4,"duration":1}]}]
tag @s add murder_bow
title @s actionbar {"text":"Лук за золото — одна стрела","color":"yellow"}

data/murder/function/gold.mcfunction

Раз в 3 с — слиток на карту: у случайного места или в случайной точке.

execute unless score #state murder matches 1 run return 0
schedule function murder:gold 3s
execute store result score #gold murder if entity @e[type=item,tag=murder_gold]
execute if score #gold murder matches 20.. run return 0
execute if entity @e[type=marker,tag=murder_spot] at @e[type=marker,tag=murder_spot,sort=random,limit=1] run return run function murder:gold/drop
execute at @e[type=marker,tag=murder_center,limit=1] run summon marker ~ ~ ~ {Tags:["murder_drop"]}
execute at @e[type=marker,tag=murder_center,limit=1] run spreadplayers ~ ~ 0 24 false @e[type=marker,tag=murder_drop]
execute at @e[type=marker,tag=murder_drop] run function murder:gold/drop
kill @e[type=marker,tag=murder_drop]

data/murder/function/gold/drop.mcfunction

Слиток золота здесь.

summon item ~ ~0.5 ~ {Item:{id:"minecraft:gold_ingot",count:1},Tags:["murder_gold"]}

data/murder/function/drop.mcfunction

Лук детектива на месте смерти.

summon item_display ~ ~1 ~ {Tags:["murder_bow_drop"],item:{id:"minecraft:bow",count:1},billboard:"vertical",Glowing:1b}
tellraw @a {"text":"Лук детектива упал — мирный может его подобрать.","color":"aqua"}

data/murder/function/load.mcfunction

При загрузке мира: счета, триггер старта и арена, если её ещё нет.

scoreboard objectives add murder dummy
scoreboard objectives add start trigger "Начать раунд"
scoreboard objectives add murder_deaths deathCount
scoreboard objectives add murder_left minecraft.custom:minecraft.leave_game
scoreboard objectives add murder_kills playerKillCount
scoreboard objectives add murder_gold dummy
scoreboard objectives add murder_reload dummy
team add murder
team modify murder nametagVisibility never
team modify murder deathMessageVisibility never
execute unless score #built murder matches 1 run schedule function murder:setup 1t
tellraw @a ["",{"text":"Мардер Мистери загружен. Начать раунд — "},{"text":"/trigger start","color":"gold","click_event":{"action":"run_command","command":"/trigger start"}},{"text":"."}]

data/murder/function/setup.mcfunction

Первая загрузка: центр карты — на поверхности в 0 0.

forceload add 0 0
execute unless loaded 8 ~ 8 run return run schedule function murder:setup 5t
kill @e[type=marker,tag=murder_center]
summon marker 0.5 0 0.5 {Tags:["murder_center"]}
execute as @e[type=marker,tag=murder_center,limit=1] at @s positioned over motion_blocking_no_leaves run tp @s ~ ~ ~
function murder:place
scoreboard players set #built murder 1

data/murder/function/tick.mcfunction

Каждый тик: старт, новички и вернувшиеся, ход игры.

scoreboard players enable @a start
execute as @a[scores={start=1..}] run function murder:start
execute as @a[tag=!murder_seen] run function murder:join
execute as @a[scores={murder_left=1..}] run function murder:join
execute if score #state murder matches 1 run function murder:play

data/murder/function/join.mcfunction

Вошёл игрок: идёт раунд — смотрит, нет — в лобби. Вышедший из игры в неё не вернётся.

scoreboard players reset @s murder_left
tag @s add murder_seen
tag @s remove murder_alive
execute if score #state murder matches 1.. run return run function murder:watch
function murder:lobby

data/murder/function/watch.mcfunction

Опоздавший и выбывший смотрят наблюдателем.

gamemode spectator @s
tp @s @e[type=marker,tag=murder_center,limit=1]
tellraw @s {"text":"Идёт раунд — вы смотрите. Следующий начнётся сам.","color":"gray"}

data/murder/function/lobby.mcfunction

Игрок в лобби: режим приключения, пустой инвентарь, полное здоровье.

gamemode adventure @s
team leave @s
clear @s
effect clear @s
effect give @s minecraft:instant_health 1 20 true
effect give @s minecraft:saturation 1 20 true
xp set @s 0 levels
xp set @s 0 points
execute as @s run attribute @s minecraft:movement_speed base reset
execute as @s run attribute @s minecraft:jump_strength base reset
execute at @e[type=marker,tag=murder_center,limit=1] run tp @s ~ ~ ~
execute at @e[type=marker,tag=murder_center,limit=1] run spawnpoint @s ~ ~ ~
attribute @s minecraft:attack_damage base reset

data/murder/function/start.mcfunction

/trigger start — места, отсчёт. Прав оператора не нужно.

scoreboard players set @s start 0
execute if score #state murder matches 1.. run return run tellraw @s {"text":"Раунд уже идёт."}
execute store result score #players murder if entity @a
execute if score #players murder matches ..2 run return run tellraw @s {"text":"Нужно хотя бы 3 игрока.","color":"red"}
scoreboard players set #state murder 2
tag @a add murder_queue
tag @a[tag=murder_queue] add murder_alive
tag @a[tag=murder_queue] remove murder_queue
execute if entity @e[type=marker,tag=murder_spot] as @a[tag=murder_alive] run tp @s @e[type=marker,tag=murder_spot,sort=random,limit=1]
execute unless entity @e[type=marker,tag=murder_spot] at @e[type=marker,tag=murder_center,limit=1] run spreadplayers ~ ~ 3 24 false @a[tag=murder_alive]
execute as @a[tag=murder_alive] at @s run spawnpoint @s ~ ~ ~
team join murder @a[tag=murder_alive]
execute as @a[tag=murder_queue] run function murder:watch
tag @a remove murder_queue
execute as @a[tag=murder_alive] run function murder:prep
scoreboard players set #count murder 10
function murder:count

data/murder/function/prep.mcfunction

Игрок на месте: пустой инвентарь, полное здоровье и сытость.

gamemode adventure @s
clear @s
effect clear @s
effect give @s minecraft:instant_health 1 20 true
effect give @s minecraft:saturation 1 20 true
xp set @s 0 levels
xp set @s 0 points
scoreboard players reset @s murder_deaths

data/murder/function/count.mcfunction

Отсчёт 10 … 1 титрами, по нулю — старт.

execute if score #count murder matches ..0 run return run function murder:go
title @a times 0 25 5
title @a title {"score":{"name":"#count","objective":"murder"},"color":"gold"}
execute as @a at @s run playsound minecraft:block.note_block.hat master @s
scoreboard players remove #count murder 1
schedule function murder:count 1s

data/murder/function/go.mcfunction

Старт раунда.

scoreboard players set #state murder 1
gamemode survival @a[tag=murder_alive]
title @a title {"text":"Старт!","color":"green"}
execute as @a at @s run playsound minecraft:entity.player.levelup master @s
gamemode adventure @a[tag=murder_alive]
scoreboard players set #winner murder 0
execute as @a[tag=murder_alive] run attribute @s minecraft:attack_damage base set 0
tag @r[tag=murder_alive] add murder_killer
tag @r[tag=murder_alive,tag=!murder_killer] add murder_detective
title @a times 5 60 10
title @a[tag=murder_killer] title {"text":"Убийца","color":"red"}
title @a[tag=murder_killer] subtitle {"text":"Убейте всех. Нож — через 10 с"}
title @a[tag=murder_detective] title {"text":"Детектив","color":"aqua"}
title @a[tag=murder_detective] subtitle {"text":"Найдите убийцу и застрелите"}
title @a[tag=murder_alive,tag=!murder_killer,tag=!murder_detective] title {"text":"Мирный","color":"green"}
title @a[tag=murder_alive,tag=!murder_killer,tag=!murder_detective] subtitle {"text":"Прячьтесь и собирайте золото"}
execute as @a[tag=murder_detective] run function murder:arm
tag @a[tag=murder_detective] add murder_reload
schedule function murder:knife 10s
execute at @e[type=marker,tag=murder_center,limit=1] run worldborder center ~ ~
worldborder set 49
function murder:timer/start
schedule function murder:gold 3s

data/murder/function/play.mcfunction

Каждый тик раунда: смерти, падения и кто остался.

execute as @a[tag=murder_alive,scores={murder_deaths=1..}] run function murder:died
execute as @a[tag=murder_alive,tag=!murder_killer,scores={murder_kills=1..}] run function murder:shot
scoreboard players reset @a[tag=murder_killer] murder_kills
execute as @e[type=item_display,tag=murder_bow_drop] at @s if entity @a[tag=murder_alive,tag=!murder_killer,distance=..1.5] run function murder:pick
execute as @a[tag=murder_alive,tag=murder_reload] unless items entity @s container.* minecraft:tipped_arrow unless items entity @s weapon.offhand minecraft:tipped_arrow run function murder:reload
execute as @a[tag=murder_alive,tag=!murder_killer] store result score @s murder_gold run clear @s minecraft:gold_ingot 0
execute as @a[tag=murder_alive,tag=!murder_killer,scores={murder_gold=10..}] run function murder:buy
execute unless entity @a[tag=murder_alive,tag=murder_killer] run scoreboard players set #winner murder 1
execute unless entity @a[tag=murder_alive,tag=!murder_killer] run scoreboard players set #winner murder 2
execute if score #winner murder matches 1.. run function murder:win

data/murder/function/died.mcfunction

Игрок погиб.

scoreboard players reset @s murder_deaths
execute if entity @s[tag=murder_reload] at @s run function murder:drop
kill @e[type=item,nbt={Item:{components:{"minecraft:custom_data":{"murder":true}}}}]
tag @s remove murder_bow
tag @s remove murder_reload
function murder:out

data/murder/function/out.mcfunction

Выбыл: наблюдатель до конца раунда.

gamemode spectator @s
tag @s remove murder_alive
execute store result score #alive murder if entity @a[tag=murder_alive]
tellraw @a ["",{"selector":"@s"},{"text":" выбывает. В игре: ","color":"gray"},{"score":{"name":"#alive","objective":"murder"}}]

data/murder/function/win.mcfunction

Победа: титры, через 10 с — новый раунд.

scoreboard players set #state murder 3
function murder:timer/stop
schedule clear murder:knife
schedule clear murder:gold
kill @e[type=item,tag=murder_gold]
kill @e[type=item_display,tag=murder_bow_drop]
kill @e[type=item,nbt={Item:{components:{"minecraft:custom_data":{"murder":true}}}}]
worldborder center 0 0
worldborder set 59999968
execute if score #winner murder matches 1 run title @a title {"text":"Мирные победили","color":"green"}
execute if score #winner murder matches 2 run title @a title {"text":"Убийца победил","color":"red"}
title @a subtitle ["",{"text":"Убийца — "},{"selector":"@a[tag=murder_killer]","color":"red"}]
tellraw @a ["",{"text":"Убийца — "},{"selector":"@a[tag=murder_killer]","color":"red"},{"text":", детектив — "},{"selector":"@a[tag=murder_detective]","color":"aqua"},{"text":"."}]
tellraw @a {"text":"Новый раунд — через 10 с.","color":"gray"}
schedule function murder:restart 10s

data/murder/function/restart.mcfunction

Новый раунд: арена заново, все — в лобби.

scoreboard players set #state murder 0
tag @a remove murder_killer
tag @a remove murder_detective
tag @a remove murder_bow
tag @a remove murder_reload
execute at @e[type=marker,tag=murder_center,limit=1] run kill @e[type=arrow,distance=..48]
execute at @e[type=marker,tag=murder_center,limit=1] run kill @e[type=item,distance=..48]
tag @a remove murder_alive
execute as @a run function murder:lobby
tellraw @a ["",{"text":"Арена готова. Начать — "},{"text":"/trigger start","color":"gold","click_event":{"action":"run_command","command":"/trigger start"}},{"text":"."}]

data/murder/function/here.mcfunction

/function murder:here — центр карты здесь (оператор).

execute if score #state murder matches 1.. run return run tellraw @s {"text":"Раунд идёт — дождитесь конца."}
execute unless loaded ~ ~ ~ run return run tellraw @s {"text":"Здесь мир не загружен — встаньте на место."}
execute at @e[type=marker,tag=murder_center,limit=1] run forceload remove ~-24 ~-24 ~24 ~24
kill @e[type=marker,tag=murder_center]
execute align xyz positioned ~0.5 ~ ~0.5 run summon marker ~ ~ ~ {Tags:["murder_center"]}
function murder:place
tellraw @s {"text":"Центр карты здесь: играют в 24 блоках вокруг вас.","color":"green"}

data/murder/function/spot.mcfunction

/function murder:spot — место появления там, где вы стоите (оператор).

execute align xyz positioned ~0.5 ~ ~0.5 run summon marker ~ ~ ~ {Tags:["murder_spot"]}
execute store result score #spots murder if entity @e[type=marker,tag=murder_spot]
tellraw @s ["",{"text":"Место появления отмечено. Всего: "},{"score":{"name":"#spots","objective":"murder"}},{"text":". Убрать все — /function murder:unspot"}]

data/murder/function/unspot.mcfunction

/function murder:unspot — убрать все места появления (оператор).

kill @e[type=marker,tag=murder_spot]
tellraw @s {"text":"Места появления убраны: игроков раскидает по карте."}

Как начать

  1. Скачайте датапак

    Распаковывать не нужно: игра читает его прямо из zip.

  2. Положите в мир

    В одиночной игре (по сети) — saves/<мир>/datapacks, на сервере — world/datapacks. Подойдёт мир с постройкой или деревней.

  3. Выберите карту

    Встаньте в середине и напишите /function murder:here. В доме с комнатами отметьте места появления /function murder:spot — иначе игроков раскидает по крышам.

  4. Начинайте

    Все ждут в центре. Кто-то пишет /trigger start — отсчёт десять секунд, и каждый видит свою роль.

Что нужно знать

  • Чат убийцу не выдаст. Ники над головами скрыты, сообщений «убит игроком» нет — только «выбывает» и сколько осталось.
  • Один удар — одна жизнь. Нож убивает с одного удара, стрела — при любом попадании, даже с ненатянутой тетивы. Кулаки не бьют вовсе.
  • Лук детектива не пропадает. Погиб детектив — его лук светится на месте смерти, подобрать может мирный, подойдя вплотную. Убийце он не даётся.
  • Стреляйте наверняка. Мирный, застреливший мирного, погибает сам.
  • Победа. Убийца погиб или время вышло — победили мирные; мирных не осталось — убийца. На экране — кто был убийцей, через десять секунд новый раунд.
  • Граница мира — только на раунд. После него она снова обычная: свою границу в этом мире пак сбросит.

Ещё игры для друзей — прятки, Голодные игры и Lifesteal. Мардер Мистери с десятками игроков — на серверах с мини-играми в мониторинге.

Частые вопросы

Как играть в Мардер Мистери в Майнкрафте?

Поставьте датапак в мир, соберитесь хотя бы втроём и напишите /trigger start. Один игрок станет убийцей с ножом, другой — детективом с луком, остальные — мирными. Каждый видит только свою роль.

На какой карте играть в Мардер Мистери?

На любой: своя постройка, деревня или лес. Встаньте в середине и напишите /function murder:here, места появления отмечает /function murder:spot — иначе игроков раскидает по полю.

Кто побеждает в Мардер Мистери?

Мирные — если детектив или мирный застрелил убийцу или кончилось время раунда. Убийца — если убил всех. Мирный, застреливший мирного, погибает сам.