Как отредактировать майнкрафт плагин worldguard ь. WorldGuard - плагин для защиты и приватизации регионов

WorldGuard - популярный плагин для защиты и приватизации мира или определённых регионов от разрушений. Плагин работает только при установленном WorldEdit. Если вам нужна защита от гриферов или же вы хотите запретить PVP в определённом регионе, то этот плагин пригодится вам, как никакой другой. Его используют почти все администраторы серверов, чтобы игроки могли защищать свои постройки, так что смело устанавливайте его!

Как пользоваться плагином WorldGuard?
Если я буду рассказывать вам о всех функциях плагина, я, как и в случае с WorldEdit потрачу более нескольких дней. Но о основных функциях плагина WorldGuard я смогу вам рассказать!
Начинает с основ, а именно с того, для чего и создавался этот плагин первоначально - для привата регионов от гриферов и нехороших людей. Для того, чтобы заприватить регион вам для начала понадобится его выделить. Как это делать я рассказывал уже много раз и расскажу ещё разок. Расскажу о самом простом методе выделения - о выделении деревянным топором. Давайте будем действовать по шагам.
1. Возьмите в руки деревянный топор.
2. Кликните левой кнопкой в точке А.
3. Кликните правой кнопкой в точке Б.
Готово, вы выделили параллелепипед. О том, где надо ставить точки для выделения параллелепипеда я затрудняюсь рассказать на словах, поэтому просто покажу вам картинку. Посмотрев на него вы всё поймёте!
WorldGuard - плагин для защиты и приватизации регионов
Так, я думаю, что с выделением региона мы разобрались. Давайте же заприватим его, чтобы злые гриферы его не разрушили.
Для привата региона вводите команду /rg claim . Я думаю, что с этим разобрались. Хотите детальнее узнать про приват регионов, тогда прочитайте эту статью о привате регионов.

С обычным использованием плагина мы разобрались. Давайте теперь настроим WorldGuard для обычных целей. Я буду рассказывать на примере своих настроек.
Для начала разберёмся с правами. Я дал вот такие права обычным игрокам:
- worldedit.wand - пермишн от плагина WorldEdit для того, чтобы игроки могли выдать себе топор командой //wand.
- worldedit.wand.toggle - пермишн для выделения регионов.
- worldguard.wand - не помню для чего, но без этого вроде бы тоже не работает выделение.
- worldedit.selection.pos - выделение региона командами.
- worldguard.region.claim - пермишн для использования команды привата после того, как игрок выделит регион.
- worldedit.selection.expand - пермишн для использования команды для расширение региона после его выделения.
- worldguard.region.addmember.own.* - добавление пользователя регионом.
- worldguard.region.addowner.own.* - добавление владельца региона.
- worldguard.region.removemember.own.* - удаление пользователя региона.
- worldguard.region.removeowner.own.* - удаление владельца региона.
- worldguard.region.remove.own.* - удаление самого региона.
После этих несложных настроек прав ваши игроки смогут использовать основной функционал плагина защиты регионов. Если вы разбираетесь в настройке прав и хотите настроить более детально, то вот список Permissions и команд на официальном Wiki-сайте разработчика плагина.

Также с помощью плагина WorldGuard можно настраивать некоторые другие функции. К примеру вы можете сделать так, чтобы когда крипер взрывался он наносил урон игрокам и мобам, которые находятся рядом, но не разрушал при этом блоки. Это всё можно сделать в файле конфигурации, который лежит в папке плагина WorldGuard/config.yml. Но если вы не разбираетесь в конфигурации плагинов, то лучше не лезьте туда, там и так уже всё нормально настроено.

If you are upgrading from a version earlier than 1.11 (1.10 or below), please read the following:

  1. Due to changes in Spigot libraries, if you used the LWC plugin, you will likely get an "UnsatisfiedLinkException" error when starting your server. This will prevent WorldGuard from working properly. It is highly recommended you update to the unofficial LWC build and remove your LWC "lib" folder. If you get anything error related to "org.sqlite.core.NativeDB", try: making /tmp/ executable, switching to oraclejdk, and/or running with "-Dsqlite.purejava=true". These are not WorldGuard issues and we cannot fix them for you.
  2. If you used a third-party plugin that added custom flags to WorldGuard, it may stop working with 6.2. It is highly recommended you backup your region files. Although WorldGuard will attempt to preserve the flags, they will likely be non-functional. Now that WorldGuard natively supports a custom flags API, third-party plugins will have to update to the new API before they work again.

This version supports only Minecraft 1.12. It may partially function as far back as 1.8, but it is recommended to use version 6.2 for Minecraft versions 1.11.2 and below as you will encounter errors when running commands.

NEW DOCUMENTATION: There is new documentation .
Developers: There is a page on using the new custom flag API.

Changes in 6.2.1

  • Flower pots are more strictly protected (via build, not just interact).
  • Added a config options (mobs.block-armor-stand-destroy) that does exactly what it says.
  • Added a firework-damage flag that does exactly what it says.
  • Add a wither-damage flag (protects from the explosion of the wither itself, not the skull projectiles)
  • Fix errors spamming console if invalid chest (3 or more connected chests) were connected to a hopper.
  • Improved readability of flag list when invalid flag is entered.

Changes in 6.2

  • Added 1.11 blocks.
  • Add config option to prevent teleport and spawn flags from being set outside of their region.
  • Added custom flags API.
  • Added custom session handler API.
  • Add transient property to regions for API.
  • Changed potion-splash flag to include throwing lingering potions.
  • Removed the construct flag. It has been deprecated for a very long time.
  • Fixed ender crystal protection.
  • Fixed some backwards compatibility issues.
  • Fixed mobs not igniting in regions due to Spigot changes.

Changes in 6.1.2

  • Added support for new blocks in 1.8, 1.9, and 1.10.
  • Added protection from nether portals being created in protected region (enable via config nether-portal-protection).
  • Added protection from slime block piston contraptions pushing into or pulling from regions.
  • Added chorus-fruit-teleport flag, works similar to enderpearl to prevent teleportation.
  • Added protection from pulling armor stands, items, and entities from protected regions.
  • Changed order of greeting and farewell flags on adjacent regions. When leaving a region with a farewell flag and entering one with a greeting flag, the farewell message will be shown first now.
  • Changed /heal command to also fill food/saturation meters.
  • Changed fall damage prevention to also prevent flying into walls with elytra being fatal.
  • Fixed fire-spread flag only preventing destruction, now prevents spreading too as per its name.
  • Fixed creepers targeting players being able to blow things up in certain cases.
  • Fixed armor stands being removed by /stoplag.
  • Fixed some issues with fireballs being able to explode when ghast-fireball was set to deny.
  • Fixed a lot of other minor issues.

Changes in 6.1

  • Added exit-via-teleport flag (default allow) to control exiting an exit=deny region via teleportation.
  • Added a fall-damage flag to control player damage caused by falling.
  • Added a time-lock flag to lock players" time of day. Valid values are from 0 to 24000 for absolute time, or +- any number for relative time.
  • Added a weather-lock flag to lock players" weather. Valid values are "clear" or "downfall". Unset to restore to normal world weather.
  • Added -s to the event debugging commands to show a stack trace rather than attempt to detect the causing plugin.
  • Added support for using the -e argument (sets an empty value for the flag) in the flag set command when the type of flag is of the "set" type.
  • Added NPCs from the Citizens plugin to a whitelist so they are not protected.
  • Added support for Spigot"s BlockExplodeEvent.
  • Changed tripwire to fall under the use flag.
  • Changed enderchests to fall under the use flag.
  • Changed vehicles and animals so they are not included in the interact flag.
  • Changed the display of custom blacklist messages to no longer include a period at the end.
  • Changed protection logic to consider connected chests.
  • Changed the heal and feed flags to increase values for players who are invincible (or in creative mode) but not decrease them.
  • Changed PvP protection to consider both attacker and defender locations.
  • Fixed missing protection data for some 1.8-added blocks.
  • Fixed compatibility issues with MC 1.7.
  • Fixed inverted daylight detectors not being protected.
  • Fixed spawn eggs not being included in protection.
  • Fixed piston blocking not working due to a bug in Spigot.
  • Fixed the blocking of certain invalid entity damage events.
  • Fixed creeper explosions not being blocked in certain situations with explosion related flags set.
  • Fixed "stickiness" with some position-related flags, sometimes resulting in rubber banding in the exit flags.
  • Fixed armor stands so that they are treated more like item frames than mobs.
  • Fixed blocks (e.g. sugar canes) adjacent to physics blocks (e.g. sand) not updating.
  • Fixed a NullPointerException that occurred sometimes when generating the scheduler section of the report function (/wg report).
  • Fixed the "no XP drops" configuration not functioning following a previous release.
  • Fixed changes to region ownership sometimes not triggering a region database save.
  • Fixed bucket protection displaying the "deny effect" even if bucket use was not prevented.
  • Fixed CommandFilter matching emoticons and other unwanted characters.
  • Fixed an exception occurring sometimes during game mode changes.
  • Fixed primed TNT being checked twice for TNT flags.

WorldGuard - это плагин для сервера Bukkit, который позволяет защищать регионы (приватить). Так же этот плагин добавляет некоторые полезные инструменты. Страница плагина доступна по адресу: http://dev.bukkit.org/server-mods/worldguard/ .

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

  1. Выделяем регион
  2. Вводим команду: /region define Имя_Региона Имя_Игрока

Основные команды

  • /god [Имя_Игрока] - сделать игрока бессмертным
  • /ungod [Имя_Игрока] - снять бессмертие с игрока
  • /heal [Имя_Игрока] - восстановить здоровье игроку
  • /slay [Имя_Игрока] - отнять жизнь у игрока
  • /stack или /; - увеличить все элементы инвентаря до максимального количества в стеке
  • /locate [Имя_Игрока] - Points your compass towards a player.

Команды Emergency (аварийные)

  • /stopfire [Мир] - останавливает распространение огня на сервере. Это временная команда, которая перестанет работать после перезагрузки сервера. Все вошедшие игроки будут предупреждены о запрете распространения огня.
  • /allowfire [Мир] - отключает действие предыдущей команды /stopfire
  • /stoplag [Мир] - останавливает все интенсивные процессы: разлив воды, разлив лавы, тнт, спавнинг мобов и т.д.. Это так же временная команда, действие которой прекратиться после перезагрузки сервера. Все вошедшие игроки будут предупреждены о включении этого режима.
  • /stoplag -c - отключает действие предыдущей команды /stoplag
  • /worldguard flushstates [Имя_Игрока] - Flush any data stored in the state manager that tracks player location for the entry, exit, greeting and farewell flags. Use this if someone is stuck in an exit deny region (or outside an entry deny one) after the flag or region has been removed.

Команды управления плагином WorldGuard

  • /worldguard version - отобразить версию плагина
  • /worldguard reload - перезапустить плагин WorldGuard
  • /worldguard report [-p] - записать в файл отчет обо всех настройках и информации о сервере в файл, который будет лежать в папке плагина

Команды WorldGuard для защиты регионов

Определение региона (define)

  • /region define <Имя_Региона> [<Владелец1> [<Владелец2> [<Другие_Владельцы...>]]]
  • /region def <Имя_Региона> [<Владелец1> [<Владелец2> [<Другие_Владельцы...>]]]
  • /region d <Имя_Региона> [<Владелец1> [<Владелец2> [<Другие_Владельцы...>]]]

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

Переопределение региона (redefine)

  • /region redefine <Имя_Региона>
  • /region update <Имя_Региона>
  • /region move <Имя_Региона>

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

Claim

  • /region claim <Имя_Региона> [<Владелец1> [<Владелец2> [<Другие_Валадельцы...>]]]

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

Информация о регионе

  • /region info [-s] [<Мир>] [<Имя_Региона>]

Отображает информацию о регионе. Флаг -s помимо отображения информации о регионе выделяет указанный регион.

Выделение региона

  • /region select [<Имя_Региона>]

Выделяет регион. Если вы не укажите Имя_Региона, будет выделено высокоприоритетный регион текущей локации.

Получить список регионов

  • /region list [<Номер_Страницы> [<Мир>]]

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

Установка флагов

  • /region flag <Имя_Региона> <Название_Флага> [<Значение>]

Устанавливает флаг для региона. Флаги могут запрещать pvp, препятствовать распространению огня, запрещать другим игрокам перемещаться по региону, выводить приветственное сообщение и многое другое. Более подробно о флагах я опишу позже. Самые полезные из них можете прочитать .

Установить приоритет

  • /region setpriority <Имя_Региона> <Приоритет>
  • /region priority <Имя_Региона> <Приоритет>
  • /region pri <Имя_Региона> <Приоритет>

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

Установить родительский регион

  • /region setparent <Имя_Региона> <Имя_Родительского_Региона>
  • /region parent <Имя_Региона> <Имя_Родительского_Региона>
  • /region par <Имя_Региона> <Имя_Родительского_Региона>

Устанавливает родительский регион. Например. У нас есть город City. В этом городе мы выдаем территории под постройку. Для этого нужно определить новый регион игроку, например, с названием City-Home-Nick и назначить игрока владельцем только, что созданного региона. Теперь чтобы игрок мог строить в своем регионе, нужно указать родительский регион: /region setparent city-home-nick city . Некоторые админы не пытаясь вникнуть в особенности плагина просто назначают владельцем региона city игрока. Это может привести к порче всего города и позорному увольнению админа.

Удаление региона

  • /region remove <Имя_Региона> <Приоритет>
  • /region rem <Имя_Региона> <Приоритет>
  • /region delete <Имя_Региона> <Приоритет>
  • /region del <Имя_Региона> <Приоритет>

Команда удаляет регион. Пример: /region remove marick - удалить регион с названием marick.

Teleport

  • /region teleport [-s] <Имя_Региона>
  • /region tp [-s] <Имя_Региона>

Teleports to the point specified by the region"s teleport flag. If you specify the -s flag, you will be teleported to the spawn point instead.


Есть класс

Class LogClass { private FileHandle File; void LogClass() { Print("::: ::: Init:::"); } void ~LogClass() { Print("::: ::: UnInit:::"); } void Save(string FileName, string String) { private int year, month, day, hour, minute, second; Print("::: : Save: " + FileName); if (!FileExist(FileName)) { File = OpenFile(FileName,FileMode.WRITE); } else { File = OpenFile(FileName, FileMode.APPEND); } if (File == 0) { Print("::: : Can not write FileName: " + FileName); Print("::: : May be disk error, file write protected, file busy or FileMode.WRITE disabled (need to specify option -scrAllowFileWrite in server run parameters for enable FileMode.WRITE."); return; } FPrintln(File, DataBase_GetDate() + "," + DataBase_GetTime() + " : " + String); CloseFile(File); } void Rotate(string FileName, int FileNum) { Print("::: : Rotate: " + FileName); if (!FileExist(FileName)) { Print("::: : Rotate: FileName not exists: " + FileName); return; } else { for (int i = FileNum; i > 0; i--) { Print("::: : Rotate: FileName: " + FileName + "." + i); if (FileExist(FileName + "." + i)) { Print("::: : Rotate: DeleteFile: " + FileName + "." + i); DeleteFile(FileName + "." + i); } if (FileExist(FileName + "." + (i - 1))) { Print("::: : Rotate: CopyFile: " + FileName + "." + (i - 1) + " => " + FileName + "." + i); CopyFile(FileName + "." + (i - 1), FileName + "." + i); } } CopyFile(FileName, FileName + ".0"); DeleteFile(FileName); } } static string DataBase_GetDate() { int year, month, day; GetYearMonthDay(year, month, day); string date = day.ToStringLen(2) + "." + month.ToStringLen(2) + "." + year.ToStringLen(2); return date; } static string DataBase_GetTime() { int hour, minute, second; GetHourMinuteSecond(hour, minute, second); string time = hour.ToStringLen(2) + ":" + minute.ToStringLen(2) + ":" + second.ToStringLen(2); return time; } } Мне нужно им пользоваться функциями из него в нескольких местах
в PlayerBase.c в функциях в классе PlayerBase
в init.c в функция в классе миссии
Вопрос как?

В PlayerBase.c
#include "$CurrentDir:\\mpmissions\\dayzOffline.chernarusplus\\_MOD\\LogClass\\LogClass.c"
Далее в классе
ref LogClass Log = new LogClass();
ну и в функциях
Log.Save{"путь-имя", данные);

Но после последнего обновления 0.63.149.525
В init.c
#include "$CurrentDir:\\mpmissions\\dayzOffline.chernarusplus\\_MOD\\LogClass\\LogClass.c"
приводит к ошибке - Multiple declaration of class "LogClass"

Can"t compile mission init script"!
$CurrentDir://mpmissions//dayzOffline.chernarusplus//_MOD//LogClass//LogClass.c(1): Multiple declaration of class "LogClass"

До этого обновления все было норм
Как быть?

Продположим

Обявили массив внутри функции

Array stringParam;
// определяем массив текстового типа который живет до завершения работы функции

Static array stringParam;
// определяем массив текстового типа который сохраняет в себе данные и после завершения работы функции и при следующем
вызове функции содержимое массива останется и может быть использовано внутри функции (повторного обьявления массива не произойдет)

String text = "text";

//записываем содержимое переменной text в элемент массива 0
stringParam.Insert(text);
//записываем содержимое переменной text в элемент массива 1, если переменная text пуста в элемент запишется текст NULL
stringParam.Insert(text, "NULL");

Читаем в переменную text элемент массива 1
string text = stringParam.Get(1);

А вот теперь вопрос
Как мне изменить эелемент 1 массива?
stringParam = "блаблабла";

Так?
в теории должно быть так

Это вообще возможно?

И еще про функцию возвращающую результат в качестве массива

Array FileRead(string FileName)
{
array stringParam;
string line_content;

CloseFile(File);
return stringParam;
}