Jump to content
Admin

ЦНС сервера или кодим сервер командными блоками

Recommended Posts

YVoWfZql.png

 

Центральная Нервная Система сервера

Большой Брат следит за вами :)

 

41 5 138

 

Представляю вашему вниманию уникальную разработку!

Система, которая позволяет реализовать функции некоторых плагинов достаточно просто, компактно и без необходимости изменять её в новых версиях игры.

В этой теме я, наконец-то, постараюсь описать то, как именно функционирует наш сервер, и все те знания, которые у меня получилось накопить и реализовать, а также планы на будущее и новые невероятные идеи.

 

Данная система была придуманна для того, чтобы реализовать некоторые функции, которых не хватало в игре, но из-за того, что я не очень хорошо разбираюсь в программировании и не собирался тратить время на изучение всего и вся, что связано с модингом и кодингом игры...

Со временем, система сильно преобразилась, выросла и заметно обросла функционалом - а, ведь, внешне это выглядит не так очевидно, согласитесь?

Но, обо всём по порядку ))

 

Эта система имеет свои недостатки (ограниченность, вероятная просадка TPS и др.), но меня она полностью устраивает и воодушевляет вот уже почти 3 года безвайповой игры на одной и той же карте.

Система полностью построена на основе встроенных возможностей игры - на командных блоках и переменных.

 

Вот функции, которые она выполняет:

и, соответственно, таким образом заменяет некоторые плагины

 

 - ограничение прав новичков и разных типов игроков, а также запрет на использование некоторых предметов;

 - обработка смены ника;

 - защита/приват территорий игроков (частные охранные системы на основе стандартных ловушек игры - "сигнализации");

 - охрана важных общественных объектов;

 - система гильдий и навыков;

 - краткое пошаговое обучение новичков (эдакий "onboard");

 - контроль заключённых и автовыход из тюрьмы;

 - раздача покупных индивидуальных эффектов (за пожретвования/донат/бонусы);

 - выборочно исключает воздействие любых команд на администраторов;

 - контроль искусственных и естественных деревенских жителей;

 - увеличение силы мобов по ночам;

 - контроль перемещения игроков в режиме "наблюдение";

 - обеспечение равных условий для всех участников во время проведения ивентов;

 

 

Итак, перейдём к описанию каждого конкретного элемента.

Спойлер

 

Принцип действия:

Спойлер

 

Система состоит из:

 

 - генератор коротких импульсов/сигналов;

 - командные блоки;

 - проводка;

 - разъясняющие таблички;

 - дополнительные помещения в других частях карты;

 

Генератор представляет из себя стандартное устройство на воронках.

Их количество подбирается индивидуально так, чтобы всё срабатывало достаточно часто, но не слишком быстро - на нашем сервере это 6 закольцованных воронок, выдающих импульс примерно каждую секунду-две.

 

С помощью проводки к генератору подключены все командные блоки, в которых задаются необходимые условия управления игровым процессом.

Конкретные примеры будут расписаны в других частях этой статьи далее по тексту.

 

Сама система должна находиться в максимально безопасном месте, чтобы избежать несанкционированного проникновения других игроков, а также должна охранять саму себя :)

 

Некоторые элементы системы находятся в других частях карты и находятся под охраной основной системы.

Такими отдельными элементами системы являются: автопрокачка в гильдии и выдача отдельных эффектов по утрам.

 

Также необходимо подписывать все элементы поясняющими табличками, во-первых, чтобы самому не запутаться, во-вторых, чтобы вашим помощникам было проще разобраться.

 

 

Основными недостатками системы являются:

 

 - ограниченность действия только миром, где она находится;

 - необходимость наличия игроков в районе нахождения системы;

 - ограниченный функционал из-за особенностей игры;

 - вероятная просадка как TPS всего сервера, так и отдельных чанков в районе расположения системы, особенно у игроков со слабым "железом";

 - относительная незащищённость системы от несанкционированного проникновения;

 - необходимость кодить всё ручками в игре и разбираться во всём досканально;

 - большая вероятность случайно что-нибудь уничтожить или совершить необратимую и неконтролируемую ошибку при внесении изменений;
 - сложность понимания принципов действия;

 - затролленная консоль сервера сообщениями командных блоков, а также гигантский лог сервера, если он не чистится автоматически;

 

 + иногда во время внесения/изменения команды в командный блок, туда "просачивается" непонятным образом какой-то невидимый символ, который можно заметить только при проверке текста команды вне игры и только после сохранения её в командном блоке и последующем копировании оттуда (так, однажды такой невидимый символ закрался во время копирования команды из одного командного блока в другой без изменений - прямо между цифрами длительности эффекта); однако с версии 1.8 данный символ стал виден в игре и его сложно не заметить.

 

Пример вредоносного символа, который не виден в игре:

JH76834.png

 

 

Основные достоинства системы:

 

 - позволяет реализовать уникальные идеи;

 - относительная простота реализации, отладки и внесения изменений;

 - нет привязки к сторонним разработчикам плагинов и ядер;

 - нет необходимости изучать досканально систему модинга игры и написание плагинов;

 - нет необходимости переделывать систему при переходе на более новую версию игры (исключения - изменение баланса и правил работы с командными блоками);

 - нет необходимости проведения сложных тестов на выявление и предупреждения багов, т.к. всё просчитывается в уме или на бумажке по заранее спланированному алгоритму или тестируется в полевых условиях;

 

 

 

Работа с новичками и сменой ника:

Спойлер

 

После перехода на 1.8 возникла проблема с новыми игроками: т.к. в ССИС ещё нет никакой информации о них.

Вся работа данной "ЦНС сервера" построена на переменных.

До версии 1.8 считалось, что если в ССИС нет никакой информации о новом игроке, то значения всех запрашиваемых переменных = 0, а с версии 1.8 в таком случае игрок просто не обрабатывается.

Из-за этого перестала работать вся система безопасности, основанная на данной "ЦНС сервера", т.к. проверки просто не срабатывали и нарушители не улетали в тюрьму. Пришлось её переделать.

 

Итак, ниже представлено описание всех аспектов работы с новыми игроками.

 

 

Защита от атак грифферов и просто нарушителей.

 

Наш сервер специально настроен на режим "Приключение" для новых игроков (на самом деле мы играем в режиме "Выживание"), чтобы мы могли отличать новичков.

При первом входе в игру теперь каждому игроку сначала явно задаются значения всех важных переменных = 0.

А получается у нас это благодаря тому, что ССИС позволяет проверять новых игроков на соответствие указанному режиму игры и нахождению в определённой команде - таким образом мы берём только новичков и только тех из них, кто только-только зашёл, т.к. через мгновение мы запихнём их в команду "Newbie".



/scoreboard players set @a[m=2,team=!Newbie] Admins 0
/scoreboard players set @a[m=2,team=!Newbie] PlayerID 0
/scoreboard players set @a[m=2,team=!Newbie] alarmCode 0
/scoreboard players set @a[m=2,team=!Newbie] ClanID 0
/scoreboard players set @a[m=2,team=!Newbie] i_newbie 0
/scoreboard players set @a[m=2,team=!Newbie] SmertiEffectov 0

Собственно, новички подготовлены для дальнейшей игры на нашем севрере и нормальной обработкой их с помощью "ЦНС сервера".

Теперь мы можем смело добавлять их в команду "Newbie" для дальнейшей работы с ними в плане автоматизированного информирования и обучения, а также визуального отличия для других игроков (у всех новичков ники зачёркнуты).

 

Делаем мы это с помощью такой команды, которая выполняется с некоторой задержкой после предыдущих команд, действует только на тех новичков, кто ещё не в этой команде и заодно проверяет выполнение предыдущих команд, сверяясь со всеми переменными:



/scoreboard teams join Newbie @a[m=2,team=!Newbie,score_Admins=0,score_PlayerID=0,score_alarmCode=0,score_ClanID=0,score_i_newbie=0,score_SmertiEffectov=0]

Далее, т.к. у нас вободный вход и отсутствует вайт-лист, а новички должны быть как-то ограничены и обезврежены в этом своеобразном "демо-режиме", мы постоянно меняем им точку спауна, раздаём положительные и отрицательные эффекты, чистим инвентарь от всякой нечисти:



/spawnpoint @a[167,65,-134,rm=10,m=2] -5 65 -31

/effect @a[167,65,-134,rm=10,m=2] minecraft:weakness 999999 2
/effect @a[167,65,-134,rm=10,m=2] minecraft:mining_fatigue 999999 50
/effect @a[167,65,-134,rm=10,m=2] minecraft:slowness 999999 0

/clear @a[m=2] minecraft:tnt
/clear @a[m=2] minecraft:lava_bucket
/clear @a[m=2] minecraft:water_bucket
/clear @a[m=2] minecraft:flint_and_steel

Также выдаётся эффект "Поглощение" (один раз до след. смерти):
/effect @a[167,65,-134,rm=10,team=Newbie,score_SmertiEffectov_min=1] minecraft:absorption 9999 19

После чего, переменная, отслеживающая смерти, обнуляется:
/scoreboard players set @p[team=Newbie,score_SmertiEffectov_min=1] SmertiEffectov 0

Обработка смены ника игроками:

 

Из-за тех же изменений в версии 1.8 при смене ника игрок с новым ником никак не числится в ССИС, но сохраняет инфу о своём режиме игры и все проверки по UUID.

Однако, для нормальной обработки таких игроков с помощью ЦНС им надо заново перезадать все переменные.

 

Для этого используется уже имеющаяся переменная, которая не используется допущенными игроками и нужна только игрокам, впервые зашедшим на сервер.

Мы принудительно обнуляем её всем допущенным игрокам.

Затем увеличиваем её значение всем допущенным игрокам на 1, проверяя другую стандартную для всех обычных игроков переменную "Admins", которой "не существует" у игроков, сменивших ник, и они не проходят проверку, и остаются с нулём.

 

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



/scoreboard players set @a[m=0] i_newbie 0
/scoreboard players add @a[m=0,score_Admins=1] i_newbie 1
/gamemode 2 @a[m=0,score_i_newbie=0]

Если вы меняете ник на тот, который уже использовлся, то ничего этого не происходит, но т.к. ник, скорее всего, уже был обработан, то вам всё равно придётся подавать заявку на смену ника и переносить все значения переменных.

 

Автоматическая обработка ника затрагивает только: админство, гильдии, кланы, личные id, отображение ника, режим игры, отрицательные эффекты.

 

Спойлер

Отключенно, т.к. это сильно выносит мозг при входе на сервер...

 

Обучение и информирование новичков.

 

Данная система была запланирована интерактивной, но на данный момент реализована по упрощённой схеме в связи с ошибками при работе с командами...

Интерактивность системы подразумевает, что новичку будет выдаваться некая информация с помощью команды /tellraw, которая в зависимости от выбора игрока будет изменять значения переменной "i_newbie" самостоятельно - и, как следствие, будут выполняться нужные другие команды, погружающие новичка в игровой процесс всё глубже и глубже.

 

Планировалось, что с версии 1.8 мы сможем взаимодействовать с игроком любыми способами с помощью команды /execute и /trigger, встроенных в команду /tellraw, и выполнять любые команды от имени нужного нам новичка, что позволит создавать интерактивные системы взаимодействия любой сложности!! :)

 

Однако, на данный момент система реализована на простейших задержках и выполнении команд по списку последовательно, циклически.

Вот примерно такими командами это делается:




/scoreboard players add @a[m=2,team=Newbie] i_newbie 1


/tellraw @a[m=2,team=Newbie,score_i_newbie_min=25,score_i_newbie=25] {"text":"","extra":[{"text":"Дружище, ","color":"gold"},{"text":"познакомься с великим миром BBya!! :)","color":"green"}]}

/tellraw @a[m=2,team=Newbie,score_i_newbie_min=30,score_i_newbie=30] {"text":"","extra":[{"text":"Сейчас ты находишься в демо-режиме: ","color":"green"},{"text":"зачёркнутый ник, отрицательные эффекты и некоторые другие ограничения.","color":"gold"}]}

/tellraw @a[m=2,team=Newbie,score_i_newbie_min=40,score_i_newbie=40] {"text":"Хочешь ли ты присоединиться к нашему сообществу? Нравится ли тебе у нас? Готов ли ты стать частью этого невероятного мира??","color":"green"}

/tellraw @a[m=2,team=Newbie,score_i_newbie_min=45,score_i_newbie=45] {"text":"","extra":[{"text":"Для полноценной игры на нашем сервере необходимо - ","color":"green"},{"text":"ознакомиться с правилами и подать заявку на форуме, в той же теме (активная ссылка).","color":"gold","clickEvent":{"action":"open_url","value":"http://forum.bbyaworld.com/index.php?/topic/2-bbya-world-informatciia-o-servere-i-pravila-igry/"},"hoverEvent":{"action":"show_text","value":"кликни на оранжевый текст - это ссылка на форум"}}]}

/title @a[m=2,team=Newbie,score_i_newbie_min=50,score_i_newbie=50] subtitle {text:"skype: bbyaworld", color:aqua, italic:true}

/title @a[m=2,team=Newbie,score_i_newbie_min=50,score_i_newbie=50] title {text:"Поговори с админом", bold:true, color:gold}

/tellraw @a[m=2,team=Newbie,score_i_newbie_min=55,score_i_newbie=55] {"text":"","extra":[{"text":"Задай вопрос админу по скайпу: ", "bold":"true", "color":"green"},{"text":"bbyaworld", "bold":"true" ,"color":"gold"}]}

/tellraw @a[m=2,team=Newbie,score_i_newbie_min=65,score_i_newbie=65] {"text":"","extra":[{"text":"Скорее подавай заявку на добавление к игровому процессу! ", "color":"green"}]}

/tellraw @a[m=2,team=Newbie,score_i_newbie_min=70,score_i_newbie=70] {"text":"","extra":[{"text":"Тебя ждут - невероятный мир и новые друзья!!", "color":"gold"}]}

/title @a[m=2,team=Newbie,score_i_newbie_min=80,score_i_newbie=80] title {text:"BBya World", bold:true, color:gold}

/title @a[m=2,team=Newbie,score_i_newbie_min=80,score_i_newbie=80] subtitle {text:"ТВОЙ НОВЫЙ ДОМ!!", color:aqua, italic:true}


/scoreboard players set @a[m=2,team=Newbie,score_i_newbie_min=150,score_i_newbie=150] i_newbie 0

Видео можно посмотреть тут:

https://youtu.be/3VDJOC1NHgY

 

 

 

 

 

Работа с нарушителями и заключёнными.

Спойлер

 

"ЦНС сервера" охраняет саму себя, все важные общественные техинческие помещения и частные охранные системы игроков на основе командных блоков и переменных.

Принцип работы охранных систем на нашем сервере основывается на том, что нарушителю присваивается определённый код переменной alarmCode, который уникален для каждого помещения и частной территории.

Во всех командах исключаются админы с помощью добавления условия "score_Admins=0".

Например, если проникнуть в "ЦНС сервера", то сработает командный блок, охраняющий помещение, в котором находится сама охранная система, охраняющая саму себя:



/scoreboard players set @a[-31,1,-27,dx=45,dy=7,dz=17,score_Admins=0] alarmCode 1

Важно отметить, что прямоугольные параллепипеды "-31,1,-27,dx=45,dy=7,dz=17" (вместо обычного сферического радиуса или при использовании одновременно с ним) указываются в строго определённом направлении, зависящем от знака перед конкретным значением дистанции! 

 

 

После того, как игрок попал в запретное помещение или активировал ловушку на чужой территории и ему присвоилось значение перменной alarmCode, его начинает обрабатывать подсистема задержания нарушителей.

 

Для начала все новички-нарушители переводятся в режим "Выживание":



/gamemode 0 @a[m=2,score_alarmCode_min=1]

Затем все игроки-нарушители вне команды "prisoners" и не админы перемещаются в команду зеков (возможно, нужно перемещать только игроков в режиме "Выживание", но пока так):



/scoreboard teams join prisoners @a[team=!prisoners,score_alarmCode_min=1,score_Admins=0]

Далее зекам сразу и постоянно чистится инвентарь, меняется точка спауна и игровой режим, накладывается эффект замедления - затем нарушитель перемещается в тюрьму и ему постоянно выдаётся информация о дальнейших необходимых действиях:



/clear @a[team=prisoners]
/gamemode 0 @a[team=prisoners]
/spawnpoint @a[team=prisoners] 0 3 0
/effect @a[team=prisoners] minecraft:slowness 999999 4

/tp @a[0,3,0,rm=10,team=prisoners] 0 3 0

/tellraw @a[0,3,0,10] {"text":"","extra":[{"text":"Внимание!! Вы стали жертвой нарушения правил сервера! Чтобы выйти из тюрьмы, отпишитесь в теме ","color":"green"},{"text":"по этой ссылке!","color":"gold","hoverEvent":{"action":"show_text","value":"Кликни на оранжевый текст"},"clickEvent":{"action":"open_url","value":"http://forum.bbyaworld.com/index.php?/topic/8-tiurma-№3/"}}]}

Заключённые находятся в тюрьме до тех пор, пока не признают свою вину и не раскаются в содеянном или наоборот - докажут свою невиновность.

Всё это обсуждается в специальной теме, там же описаны дополнительные функции - такие, как модуль "Анти-бунт".

 

 

Процесс выхода игрока на свободу автоматизирован.

Для того, чтобы выпустить игрока из тюрьмы, оператор должен любым способ задать значение перменной "alarmCode = -1" - далее автоматика всё сделает сама (сменит команду, изменит точку спауна, снимет эффекты, телепортнёт и сбросит код охранной системы):



/scoreboard teams leave @a[0,3,0,10,score_alarmCode=-1]
/spawnpoint @a[0,3,0,10,team=!prisoners] -5 66 -31
/effect @a[0,3,0,10,team=!prisoners] clear
/tp @a[0,3,0,10,team=!prisoners] -5 66 -31
/scoreboard players set @a[-5,66,-31,20,score_alarmCode=-1] alarmCode 0

С этого момента игрок полностью свободен, находится на спауне, к нему нет никаких претензий и уже невозможно будет узнать код нарушения, которое он совершил.

К сожалению, восстанавливать отображение гильдий нужно ручками, т.к. иначе это будет слишком громоздкое дополнение в условиях нашего сервера: у нас за каждый уровень в каждой гильдии отвечает своя команда и их десятки - это означает, что для автоматизации возврата отображения уровня гильдии, необходимо поставить на каждый возможный вариант по командному блоку, который будет проверять соответствующую переменную и после этого перекидывать игрока в соответствующую команду.

 

P.S.: чтобы посадить нарушителя в тюрьму ручками или выпустить его с помощью автоматизированной системы, нарушителю не обязательно находиться в игре, т.к. ССИС позволяет задавать значения переменных и менять команды для игроков в оффлайне...

 

 

Запрещённые предметы и дополнительные ограничения.

 

На нашем сервере запрещено носить некоторые предметы (читай - запрещено использование).

 

Для обеспечения дополнительной безопасности стратегических объектов всем игрокам запрещено переносить Жемчуг Края в зоне спауна:



/clear @a[x=140,y=10,z=-200,r=300,score_Admins=0] minecraft:ender_pearl

Кроме того, используется эдакая заглушка, которая позволяет запретить всеми игрокам, кроме админов, скрывать свой ник на Dynmap:



/dynmap show @a[score_Admins=0]

 

 

Беспроигрышная лотерея:

Спойлер

 

Из-за недостатка времени у представителей администрации на сервере почти не проводятся ивенты в их обычном понимании (ни что не вечно).

В качестве компенсации и с дополнительной целью повышения онлайна запущена беспроигрышная лотерея с помощью всего одного командного блока - в определённое время суток случайному игроку в онлайне выдаётся бонус в виде небольшой порции изумрудов.

Админы (Admins=1) и новички (m=2) не участвуют в розыгрыше.



/give @r[m=0,score_Admins=0] minecraft:iron_ingot

 

 

Контроль за стандартными и искусственными деревенскими жителями:

Спойлер

 

С версии 1.8 мы взяли под контроль цены у деревенских жителей, а также сильно ограничили их количество.

Реализовано это с помощью одного командного блока, который убивает всех стандартных жителей.



/effect @e[type=Villager] minecraft:instant_damage 2 5

Убийство происходит эффектом "Мгновенный урон", т.к. нам необходимо сохранить спец.жителей, которые обслуживают нужды игроков при торговле с сервером, но по установленным администрацией ценам, а команда /kill убивала бы всех без разбора.

Спец.жители создаются с помощью командных блоков и настроенной команды /summon с параметром бессмертия ("Invulnerable:1").



/summon Villager ~ ~ ~ {Invulnerable:1,CustomName:Глиномес,CustomNameVisible:1,Profession:3,Offers:{Recipes:[{maxUses:999999,buy:{id:3,Count:1},buyB:{id:388,Count:1},sell:{id:82,Count:1}},{maxUses:0,buy:{id:51,Count:1},sell:{id:51,Count:1}},]},}

Поэтому, в теории всё должно было быть хорошо...

Стандартные жители умирают мгновенно - даже те, кто спаунится на спаунерах (на нашем сервере была практика розыгрыша яиц призывания, в том числе и деревенских жителей, но с версии 1.8 пришлось отказаться от этого, т.к. любой игрок теперь может изменить спаунер, просто тыкнув на него нужным яйцом призывания).

 

Однако, почему-то умирают и "бессмертные" жители, что навело нас на несколько колхозных мыслей: попробовать задрать параметр количества жизней спец.жителям до небес, чтобы они только через год умирали, или подкладывать под них командные блоки с нажимными плитами, чтобы они ходили по ним и сами себя лечили.

 

В итоге, мы смогли кое-как решить проблему со спец.жителями для нужд сервера, однако это всё ещё не очень удобно и не позволяет добавлять большее количество спец.жителей с разнообразными условиями по сделкам, т.к. в случае чего замучаемся восстанавливать их...

 

Кроме того, основной целью введения спец.жителей был только контроль цен, а не ограничение использования их игроками.

Поэтому мы хотим раздавать игрокам спец.жителей с особыми настройками сделок, однако для этого нам нужна возможность обновления "устаревших" спец.жителей хотя бы по заявкам от владельцев.

 

Для этого нам нужны параметры, по которым можно было бы исключать выборочно любых спец.жителей, не меняя их отображаемых имён, и так, чтобы обычные игроки не могли вносить изменения.

 

На данный момент мы можем только задавать нестандартные параметры, но проверять в командных блоках можем только параметр "name".

Но этот параметр может изменить любой игрок.

И на данный момент единственная возможность избежать этого - это задать параметр "name" сразу в команде при создании искусственного жителя: тогда - как бы не меняли имя жителю игроки, командным блоком всегда можно проверить исходное имя и убить всех неверных.

Косяк в том, что у всех спец.жителей имя всегда будет одинаковым, а это какой-то отстой, хоть и приемлемо в некоторых ситуациях...

 

В общем, над этим пока ещё работаем :)

 

 

 

Изменение свойств мобов:

Спойлер

 

С 27 августа 2015 года в тестовом режиме запущена система, автоматически увеличивающая силу мобов в ночное время.

Сделано это в рамках общего усложнения игрового процесса на сервере (см. п.п. 6.1).

 

Реализация очень простая: с помощью датчика света поздно вечером подаётся сигнал на командные блоки, которые раздают всем мобам в обычном мире эффекты ограниченной длительности (7 минут = длительность ночи).



/effect @e[type=!Player] minecraft:strength 420 0
/effect @e[type=!Player] minecraft:speed 420 0
/effect @e[type=!Player] minecraft:resistance 420 1

 

 

Контроль перемещения игроков в режиме "наблюдение":

Спойлер

 

Я уже давно хотел добавить возможность летать для обычных игроков. Например, для того, чтобы было удобнее планировать строительство.

Я не смог сделать это прямым путём, по типу как в креативе (хотя, вроде бы, есть какие-то параметры полёта в игре).

Однако я могу предложить игрокам летать в режиме спектатора. Для этого им нужно будет в специальном месте переключить свой режим игры, а по окончании полётов переместиться в специальную комнату и там их режим будет автоматически изменён на "выживание".

 

Добавил обработку спектаторов: обычные игроки в режиме спектатора не смогут опуститься ниже высоты Y=65, а админы могут.

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

Кроме того, на спектаторов действуют стандартные частные охранные системы: поэтому спектаторам также необходимо следить за маршрутами своих полётов и не пролетать над частными территориями без явного и неопровержимого согласия владельца  :)

/tp @a[-3000,65,-3000,dx=6000,dy=-65,dz=6000,m=3,score_Admins=0] ~ ~50 ~

Как работает эта команда?

 

Размер карты - 6000х6000. Командный блок проверят пространство от точки с координатами x=-3000 y=65 z=-3000 до точки с координатами x=3000 y=0 z=3000. Командный блок воздействует только на игроков в режиме "Спектатор" (m=3), но исключает админов (score_Admins=1). Спектаторы просто телепортятся на 50 клеток вверх.

 

 

 

Обеспечение равных условий для всех участников во время проведения ивентов:

Спойлер

 

С 10 января 2015 года в систему интегрировано условие недействительности всех эффектов для любых игроков в зоне арены для ивентов.

Таким образом реализовано равноправие всех участников состязаний в зоне арены: при входе на ринг у всех бойцов снимаются все эффекты и игроки становятся в равные условия, играя по оговоренным между собой правилам. Новые эффекты не накладываются, т.к. это прописано в командных блоках.

По сути, зона арены стала зоной свободного пвп, где игроки вынуждены договариваться между собой без привлечения и без предъявления претензий и жалоб администрации.

 

Данное условие реализовано с помощью ограничения минимального радиуса действия с началом координат в центре арены.

* примерно с августа 2015 года изменилась система автоматического отключения эффектов в зонах проведения ивентов - надо немного переписать этот фрагмент описания...
 

Изначально одна из команд выглядела достаточно просто:

/effect @a[m=2] 18 999999 2

С этим дополнением она усложняется указанием центра координат и минимальным радиусом действия конкретного командного блока:

/effect @a[167,65,-134,rm=10,m=2] 18 999999 2

где:

 

 - @a: указатель цели на всех игроков;

 - 167,65,-134: координаты центра зоны действия конкретного командного блока (отсутствие явно заданных координат = координаты расположения блока, в который вписана эта команда; координаты можно указывать в упрощённом виде, как в примере или для удобства - явно: "x=167,y=65,z=-134");

 - rm=10: минимальный радиус действия;

 - m=2: условие действия только на игроков в режиме приключение;

 - 18эффект слабости;

 - 99999: длительность действия;

 - 2: уровень эффекта.

 

 

 

Гильдии и навыки:

Спойлер

 

Пока ещё не описал...

 

 

 

  • Like 1

Share this post


Link to post
Share on other sites

Один из самых главных недостатков этой системы - это то, что всё находится в одном месте.

Чисто теоретически, какой-нибудь читер может попробовать деактивировать эту систему и натворить делов, несмотря на то, что мы используем плагин-логгер с возможностью откатов действий игроков, а сама система пытается охранять саму себя...

Однако я придумал, как можно модернизировать систему, чтобы она стала децентрализованной и самовосстанавливающейся.

- сама система должна остаться в центре карты и в единственном экземпляре;

- однако по карте должны быть разбросаны несколько охранных комплексов, которые будут проверять целостность друг друга и центрального сегмента.

Share this post


Link to post
Share on other sites

Добавил инфу о свежеизменённой системе работы с новичками, о системе работы с заключёнными, об автоматизации лотерей, о работе с деревенскими жителями   :)

Edited by Admin

Share this post


Link to post
Share on other sites

"И на данный момент единственная возможность избежать этого - это задать параметр "name" сразу в команде при создании искусственного жителя: тогда - как бы не меняли имя жителю игроки, командным блоком всегда можно проверить исходное имя и убить всех неверных.

Косяк в том, что у всех спец.жителей имя всегда будет одинаковым, а это какой-то отстой, хоть и приемлемо в некоторых ситуациях...

 

В общем, над этим пока ещё работаем  :)"

 

Я знаю, как это можно реализовать в нужном вам виде. Опишу в скайпе.

 

 

" - затролленная консоль сервера сообщениями командных блоков, а также гигантский лог сервера, если он не чистится автоматически;"

 

gamerule logAdminCommands false.

Edited by Оцелот

Share this post


Link to post
Share on other sites
Достижения

Игровое правило изменил - отпишусь позже о результате.

 

А с жителями решили проблему с помощью стандартных внутриигровых "команд".

На самом деле пока и проблемы нет, т.к. никому не нужны жители с ценами, отличающимися от стандартных.

Share this post


Link to post
Share on other sites

А с жителями решили проблему с помощью стандартных внутриигровых "команд".

На самом деле пока и проблемы нет, т.к. никому не нужны жители с ценами, отличающимися от стандартных.

Не видел этого, хотел как раз предложить такой вариант.

Share this post


Link to post
Share on other sites
Достижения

Добавил в раздел "Работы с нарушителями и заключёнными" пример использования прямоугольных параллепипедов для поиска целей (вместо радиуса сферы).

Share this post


Link to post
Share on other sites

Запустил заново, но снова в старом формате, информирование новичков.
Подробное описание в первом посте.

 

 + видео, если влом заходить под бесплатными акками и тестить самостоятельно :)

 

 

Share this post


Link to post
Share on other sites

Ужасно медленно, надо все быстрее. Средние время нахождение на сервере 1.5 минуты, так что...

Share this post


Link to post
Share on other sites
Достижения

Ужасно медленно, надо все быстрее. Средние время нахождение на сервере 1.5 минуты, так что...

 

Не надо ля-ля - итак нифига не понятно и не всё успеваешь прочитать...

 

 + половина игроков вообще не вкуривает нифига: ни наши условия игры, ни наши методы обращения (начиная с инйормационных табличек в рамках, демо-режима и заканчивая как раз таким способом подачи инфы)...

 

 

А те, кто заходят на 30 секунд на сервер могут вообще не заходить, т.к. у нас нет задачи задержать всех балбесов - нам нужны определённые игроки, которые заходят на сервер, заранее узнав о нём хоть что-то, а не просто случайно тыкнув какой-то адрес из списка...

 

Ещё раз: все, кто заходят на сервер, чтобы их сразу начали кружить и веселить, пусть уходят сразу - до того, как появится первое сообщение :)

Особенно это касается тех, кто начинает общение с фразы "кто админ?"...

Share this post


Link to post
Share on other sites

Дополнительно с 10 января 2015 года в систему интегрировано условие недействительности всех эффектов для любых игроков в зоне арены для ивентов.

Таким образом реализовано равноправие всех участников состязаний в зоне арены: при входе на ринг у всех бойцов снимаются все эффекты и игроки становятся в равные условия, играя по оговоренным между собой правилам. Новые эффекты не накладываются, т.к. это прописано в командных блоках.

По сути, зона арены стала зоной свободного пвп, где игроки вынуждены договариваться между собой без привлечения и без предъявления претензий и жалоб администрации.

 

Данное условие реализовано с помощью ограничения минимального радиуса действия с началом координат в центре арены.

 

Изначально одна из команд выглядела достаточно просто:

/effect @a[m=2] 18 999999 2

С этим дополнением она усложняется указанием центра координат и минимальным радиусом действия конкретного командного блока:

/effect @a[167,65,-134,rm=10,m=2] 18 999999 2

где:

 

 - @a: указатель цели на всех игроков;

 - 167,65,-134: координаты центра зоны действия конкретного командного блока (отсутствие явно заданных координат = координаты расположения блока, в который вписана эта команда; координаты можно указывать в упрощённом виде, как в примере или для удобства - явно: "x=167,y=65,z=-134");

 - rm=10: минимальный радиус действия;

 - m=2: условие действия только на игроков в режиме приключение;

 - 18: эффект слабости;

 - 99999: длительность действия;

 - 2: уровень эффекта.

 

Норц, я, наконец, вкурил, как реализовать автоматическое отключение эффектов в зоне проведения ивентов (новичков можно исключать, а можно не исключать - я бы тоже добавил в исключение на всякий случай, чтобы можно было хотя бы теоретически прийти с другого сервера и поучаствовать в ивенте без заявок на форуме о добавлении к игровому процессу).

 

Итак, что для этого нужно сделать (делать можно смело, т.к. есть бэкапы со всеми командами + есть мозг):

 

 1) Убрать координаты центра и минимальные радиусы зоны действия во всех командных блоках без исключения (в основном помещении ЦНС и в дополнительном модуле, в ЗТ);

 

Предыдущий пункт можно сделать в любое удобное время, а следующие пункты - только единовременно (в течение одного дня) так, чтобы не было никаких серьёзных задержек с раздачей эффектов на день или более...

 

 2) Немного переподключить раздачу эффектов (гильдийных, платных и при необходимости - для новичков), но только в основном помещении ЦНС:

 

 - перед ними нужно поставить сначала командный блок, который будет присваивать всем игрокам в онлайне значение какой-нибудь специальной переменной (например, EventCheck, которую надо создать) = "1"; например, этот кб можно поставить сразу после генератора (если что - задавать значение переменной можно сразу всем и в онлайн, и в оффлайн);

 

 - затем, после задержки в одно значение повторителя поставить несколько командных блоков, каждый из которых задаст игрокам на своей территории проведения ивента значение той же переменно = "0"; одновременно с этими командными блоками могут и должны срабатывать кб-дублёры, которые будут снимать эффекты со всех игроков в соответствующих зонах проведения ивентов (либо тупо всем игрокам в зонах проведения ивентов, либо по значению переменной = "0"); на этом же этапе необходимо оставить запасное свободное пространство для дополнительных кб для обработки будущих мест проведения ивентов.

 

 - после такой подготовки (именно последовательно - на всякий случай после описанных выше кб-подготовки), с дополнительной задержкой в один повторитель - должны будут срабатывать все блоки выдачи эффектов (гильдийных, платных и для новичков).

 

3) Прописать во все кб выдачи эффектов (гильдийных, платных и для новичков), чтобы эти эффекты выдавались только игрокам с параметром "score_EventCheck=0".

 

Таким образом, мы однозначно будем раздавать эффекты только тем игрокам, которые находятся вне зон проведения ивентов, а игроки, находящиеся в этих зонах, однозначно будут без эффектов.

 

Ещё раз суть того, как это будет происходить:

 

 - сначала всем игрокам в онлайне присваиваем значение переменной = "1";

 - затем присваиваем значение той же переменной для игроков в зонах проведения ивентов = "0";

 - параллельно чистим эффекты для всех игроков, находящихся в зонах проведения ивентов;

 - затем раздаём все необходимые эффекты (гильдийные, покупные, для новичков) только тем игрокам, у которых значение условной переменной = "1" (у игроков в зонах проведения ивентов значение переменной будет = "0" и они не получат эффектов);

 

Профит :)

Даже, если произойдёт какой-то косяк (кто-нибудь быстро что-нибудь сделает или прибежит, кто-нибудь получит утренние эффекты и т.д.), то через секунду-две - процесс зачистки повторится и всё должно быть ок :)

 

P.S.: естественно, во всех кб должно быть прописано исключение админов - "score_Admins=0"...

Share this post


Link to post
Share on other sites

 1) Убрать координаты центра и минимальные радиусы зоны действия во всех командных блоках без исключения (в основном помещении ЦНС и в дополнительном модуле, в ЗТ);

Норц, это я сделал - осталось самое сложное )

Share this post


Link to post
Share on other sites

Норц, создал переменную "EventCheck".

Поставил кб, который присваивает всем игрокам в онлайне значение переменной "EventCheck = 0".

Прописал во все кб покупных и гильдийных эффектов, а также для эффектов новичков, условие ",score_EventCheck=0", чтобы эти эффекты выдавались только вне зон проведения ивентов.

 

Осталось реализовать задержку для этих командных блоков выдачи эффектов и перед ней поставить командные блоки с присвоением значения переменной "EventCheck = 1" игрокам в зонах проведения ивентов, чтобы этим игрокам не выдавались эффекты.

Share this post


Link to post
Share on other sites

Осталось реализовать задержку для этих командных блоков выдачи эффектов и перед ней поставить командные блоки с присвоением значения переменной "EventCheck = 1" игрокам в зонах проведения ивентов, чтобы этим игрокам не выдавались эффекты.

Норц, сделал: и задержку, и поставил тестовый кб c кб для убирания эффектов - ща проверю, работает или нет :)

А ты уже можешь добавлять кб для своих зон проведения ивентов и тестить невыдачу эффектов.

 

Можно использовать как сферическое ограничение (r=), так и ограничение параллепипедом (dx=, dy=,dz=), а также комбинацию, если это по каким-то причинам нужно.

 

 

qd6L0U2m.png

 

 

P.S.: обновил скрин ЦНС в первом сообщении...

 


 

UPD:

Вроде, получилось:

 

 - делаешь вывод переменной в EventCheck в sidebar и следишь за ней;

 - заходишь в зону тестового игрового автомата, около ЖК: в этой зоне у тебя постоянно будет поддерживаться "1";

 - выдачу и убирание эффектов можно проверять по причастности к гильдиям (я тестил на отрицательных эффектах торговцев);

 

Для чёткости предлагаю делать постройки для проведения ивентов с прилегающей территорией и на всей этой зоне обрабатывать игроков, чтобы в саму зону проведения ивента они заходили уже точно без эффектов.

 

 + рекомендую использовать не сферу, а параллелепипед: пример можно посмотреть в кб охранной системы общественных построек, рядом с генератором ЦНС - имей ввиду, что что координаты параллелепипеда задаются из одной точки (там есть вариации и с отрицательными значениями - надо напрягать мозг для пространственного мышления)...

Share this post


Link to post
Share on other sites

Добавил инфу об автоматическом изменении свойств мобов в ночное время.

Share this post


Link to post
Share on other sites

Надо пофиксить новичков - они бессмертные из-за дополнительных сердец.

 

Косяк в этом алгоритме, который, вроде, нормально работает с обычными игроками:
 

 

 

Также выдаётся эффект "Поглощение" (один раз до след. смерти):
/effect @a[167,65,-134,rm=10,team=Newbie,score_SmertiEffectov=1] minecraft:absorption 9999 19

После чего, переменная, отслеживающая смерти, обнуляется:
/scoreboard players set @p[team=Newbie,score_SmertiEffectov=1] SmertiEffectov 0

Share this post


Link to post
Share on other sites

Ага, есть такое дело)

А вы откуда знаете - часто устраиваете дедовщину? :)

Share this post


Link to post
Share on other sites

Ага, есть такое дело)

А вы откуда знаете - часто устраиваете дедовщину? :)
Было дело.. Edited by BByaRean

Share this post


Link to post
Share on other sites
Достижения

Нет, просто один новичок хотел умереть в лаве чтобы востановить сытость... Никак)

Share this post


Link to post
Share on other sites
Достижения

Получается, что и сытость восстанавливать не нужно - больше можете не вестись на просьбы дать пожрать :)

Share this post


Link to post
Share on other sites

Надо пофиксить новичков - они бессмертные из-за дополнительных сердец.

Косяк в этом алгоритме, который, вроде, нормально работает с обычными игроками:

Также выдаётся эффект "Поглощение" (один раз до след. смерти):

/effect @a[167,65,-134,rm=10,team=Newbie,score_SmertiEffectov=1] minecraft:absorption 9999 19

После чего, переменная, отслеживающая смерти, обнуляется:

/scoreboard players set @p[team=Newbie,score_SmertiEffectov=1] SmertiEffectov 0

Добавь "score_SmertiEffectov_min=1" в первую команду, а то у тебя там "до 1", а 0 это тоже "до 1", вот оно и выдаётся тупо всем в команде новичков. Ну или можно просто не обнулять смерти. Edited by Оцелот

Share this post


Link to post
Share on other sites
Достижения

Вот!

Именно для этого я и выкладываю всю инфу по серверу - чтобы можно было коллективным мозгом решать проблемы :)

 

 

А как, не обнуляя смерти, обрабатывать выдачу эффектов только 1 раз после смерти?

Ведь, новичок может умирать много раз и каждый раз должен возвращаться в строй в стандартной экипировке.

Share this post


Link to post
Share on other sites

Всё - пофиксил новичков: они теперь не бессмертные :)

 

Первое сообщение пофиксил )

Share this post


Link to post
Share on other sites

Вот!

Именно для этого я и выкладываю всю инфу по серверу - чтобы можно было коллективным мозгом решать проблемы :)

А как, не обнуляя смерти, обрабатывать выдачу эффектов только 1 раз после смерти?

Ведь, новичок может умирать много раз и каждый раз должен возвращаться в строй в стандартной экипировке.

С этим не сразу понял, подумал, что ты хочешь выдавать эффекты до первой смерти, а потом чтобы сами. Edited by Оцелот

Share this post


Link to post
Share on other sites
Достижения

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

  • Recently Browsing   0 members

    No registered users viewing this page.

×