Плагин Dynmap для вашего сервера Minecraft позволяет настроить одну очень полезную функцию — доступ к карте прямо из браузера. Благодаря этому можно не только чатиться с игроками, даже не заходя на сервер, но и обозревать весь мир в формате Гугл-карт.
Где скачать Dynmap?
Первым делом нужно найти место, где размещаются последние сборки плагина. На сайте https://dynmap.us/builds/dynmap/?C=M;O=D есть сборки для различных версий игры. Если вам нужна сборка для Spigot — скачивайте файл с названием вида «Dynmap-3.1-SNAPSHOT-spigot.jar». Если же нужна версия для Forge, то выбирайте нужную версию и скачивайте нужный вам файл. Например, здесь можно скачать версию для Forge 1.12.2.
После скачивания версии для Spigot, загрузите jar-файл в папку /plugins/ на вашем FTP-сервере. Если же вы скачали версию для Forge — загружайте jar-файл в папку /mods/.
Как настроить порт Dynmap?
В папке /plugins/dynmap есть файл configuration.txt. Его нужно скачать себе на компьютер и открыть в текстовом редакторе. В файле необходимо найти строчку «webserver-port» поиском (нажмите клавиши CTRL+F). Там вы найдете такую строчку:
# The TCP-port the webserver will listen on. 25565-25665
webserver-port: 25565
Теперь нужно исправить цифру 25565 на другую. Какую же, спросите вы? А вот здесь таится хитрость. Нужно прописать порт вашего сервера Minecraft плюс 100. Например, ваш сервер на нашем хостинге имеет порт 25680? Значит, пропишите webserver-port: 25780
Как открыть карту?
После прописания нового порта в файл настройки, сохраните файл configuration.txt и загрузите через FTP-клиент обратно в папку dynmap. Теперь самое время перезапустить сервер, зайти на него и начать летать вокруг. Допустим, у вашего сервера айпи 123.45.67.89:25680, тогда у карты Dynmap адрес будет такой: http://123.45.67.89:25780/ — пройдите по схожему адресу, после чего карта начнет подгружаться.
Если у вашего тарифного плана не так много доступных гигабайт оперативной памяти, не удивляйтесь: сервер может начать притормаживать. Особенно это касается серверов с 1 гигабайтом оперативной памяти и игроками, находящимися на сервере в момент ваших полетов. Притормаживания очень легко предупредить: достаточно пролететь небольшой отрезок пути и остановиться секунд на 5, после чего продолжить путь. Карта обновится через 10-30 секунд.
Настройки отображения карты
У карты dynmap есть несколько различных режимов отображения. Подвиньте курсор в правую часть экрана и вы увидите выдвигающуюся правую панель с рядом кнопок:
Первая кнопка представляет из себя плоскую географическую карту, вид сверху. Вторая кнопка — псевдо-3D, в котором мир отображается под углом. Третья кнопка показывает пещеры под землёй.
Второй ряд кнопок представляет из себя то же самое, но для Нижнего мира (Nether). Третий ряд кнопок — аналогично, но для Края (The End).
Настраивайте плагин для отображения карты на вашем сервере, размещайте ссылку на сайте вашего сервера и игроки значительно повысят активность, имея возможность увидеть свой сервер «из космоса».
С любовью,
команда Ru-hoster ❤
Автор:
Alexandr116ru
По сути, это всего лишь объединение двух скриптов в один. По мере сил и возможностей. Вероятно, тут всё грубо и далеко не идеально (ну не владею я такими навыками).
Но скрипт работает 100% корректно.
Установка:
1. Создать файл с раширением ИМЯ_ФАЙЛА.sqf, скопировать в него содержимое кода:
private[«_textPos»,»_rand_player»,»_playerpos»,»_randomLoot»,»_maxLootRadius»,»_playerPresent»,»_finder»,»_preWaypointPos»,»_startTime»,»_heliStart»,»_heliModel»,»_lootPos»,»_wp1″,»_wp2″,»_wp3″,»_landingzone»,»_aigroup»,»_wp»,»_helipilot»,»_crashwreck»,»_vel»,»_pos»,»_dir»,»_position»,»_num»,»_itemType»,»_CBLBase»,»_weights»,»_cntWeights»,»_index1″,»_index2″,»_crashName»,»_objectID»,»_marker_position»,»_marker»,»_mdot»,»_flyToPlayer»,»_dropPosition»,»_chute»,»_chutePos»,»_FlyingSupplyBox»,»_smoke»,»_var»,»_posATL»,»_SupplyBox»,»_mapLootPos»];
if ((count playableUnits) < 1) exitWith {diag_log(«[ХЕЛИКРАШ ОТМЕНА]: Нет игроков на сервере»);}; //СКРИПТ НЕ БУДЕТ ВЫПОЛНЯТЬСЯ, ЕСЛИ НА СЕРВЕРЕ НЕТ ИГРОКОВ
_rand_player = playableUnits call BIS_fnc_selectRandom;
_playerpos = [_rand_player] call FNC_GetPos;
_heliModel = [«Mi17_TK_EP1″,»Mi17_CDF»,»Mi17_Ins»,»Mi17_UN_CDF_EP1″,»Mi171Sh_CZ_EP1″,»AH6J_EP1″,»UH1H_TK_GUE_EP1″,»UH1H_TK_EP1″,»UH1Y»,»MH60S»,»UH60M_EP1″,»AH6X_EP1″,»MH6J_EP1″,»Mi17_Civilian»,»Mi17_medevac_Ins»,»Mi17_medevac_CDF»,»Mi17_medevac_RU»,»UH60M_MEV_EP1″,»BAF_Merlin_HC3_D»,»CH_47F_EP1″,»CH_47F_BAF»,»MV22″,»C130J»] call BIS_fnc_selectRandom;
_heliStart = [[1000.0,2.0],[3500.0,2.0],[5000.0,2.0],[7500.0,2.0],[9712.0,663.067],[12304.0,1175.07]] call BIS_fnc_selectRandom; //КООРДИНАТЫ, ОТКУДА БУДЕТ ВЫЛЕТАТЬ БОРТ. ДЛЯ ЧЕРНО
_crashName = getText (configFile >> «CfgVehicles» >> _heliModel >> «displayName»);
_finder = «»;
_randomLoot = [«HeliCrash»,»Hospital»,»Military»,»MilitaryIndustrial»,»MilitarySpecial»] call BIS_fnc_selectRandom; //СПИСОК, ОТКУДА БУДЕТ БРАТЬСЯ ЛУТ ДЛЯ ПРИЗЕМЛИВШЕЙСЯ КОРОБКИ
//ЗДЕСЬ МОЖНО РАЗМЕСТИТЬ ОПОВЕЩЕНИЕ ИГРОКАМ О СТАРТЕ ИВЕНТА
_position = [getMarkerPos «center»,0,5000,10,0,2000,0] call BIS_fnc_findSafePos;
diag_log(format[«[ХЕЛИКРАШ НАЧАЛО]: %1 вылетел с позиции %2 к позиции %3!», _crashName, str(_heliStart), str(_position)]); //ЭТУ СТРОКУ МОЖНО УДАЛИТЬ, ЕСЛИ НЕ ТРЕБУЕТСЯ ЛОГГИРОВАНИЕ В СЕРВЕРНЫЙ RPT
_startTime = time;
_crashwreck = createVehicle [_heliModel,_heliStart, [], 0, «FLY»];
_objectID = str(round(random 999999));
_crashwreck setVariable [«ObjectID», _objectID, true];
_crashwreck setVariable [«ObjectUID», _objectID, true];
PVDZE_serverObjectMonitor set [count PVDZE_serverObjectMonitor,_crashwreck];
waitUntil {(!isNull _crashwreck)};
_crashwreck setCombatMode «BLUE»;
_crashwreck engineOn true;
_crashwreck flyInHeight 200; //ВЫСОТА ПОЛЁТА. ЕСЛИ НОВИЧОК, ЛУЧШЕ НЕ ТРОГАЙ. ИНАЧЕ БУДЕТ СБОИТЬ СБРОС КОРОБКИ. БОРТ БУДЕТ КРУЖИТЬ НАД ИГРОКОМ, ТЕМ САМЫМ, ДЕМОРАЛИЗУЯ И НАРУШАЯ ЕГО ПСИХИКУ
_crashwreck forceSpeed 150;
_crashwreck setspeedmode «NORMAL»;
_landingzone = createVehicle [«HeliHEmpty», [_position select 0, _position select 1,0], [], 0, «CAN_COLLIDE»];
_aigroup = creategroup civilian;
_helipilot = _aigroup createUnit [«SurvivorW2_DZ»,getPos _crashwreck,[],0,»FORM»];
_helipilot setCombatMode «BLUE»;
_helipilot moveindriver _crashwreck;
_helipilot assignAsDriver _crashwreck;
uiSleep 0.5;
if ((isPlayer _rand_player) && (alive _rand_player)) then { //ЕСЛИ ВЫБРАННАЯ ЦЕЛЬ — ИГРОК И ЕСЛИ ИГРОК ЖИВ, ТО ПОЛЕТИТ НА ЕГО ПОЗИЦИЮ
_wp1 = _aigroup addWaypoint [[(_playerpos select 0),(_playerpos select 1),200],0];
_wp1 setWaypointType «MOVE»;
_wp1 setWaypointBehaviour «CARELESS»;
_flyToPlayer = true;
for «_x» from 1 to 5 do
{
_preWaypointPos = [getMarkerPos «center», 0, 5000, 10, 0, 2000, 0] call BIS_fnc_findSafePos;
_wp = _aigroup addWaypoint [_preWaypointPos, 0];
_wp setWaypointType «MOVE»;
_wp setWaypointBehaviour «CARELESS»;
};
diag_log(format[«[ХЕЛИКРАШ]: %1 полетел к игроку %2», _crashName, (name _rand_player)]); //ЭТУ СТРОКУ МОЖНО УДАЛИТЬ, ЕСЛИ НЕ ТРЕБУЕТСЯ ЛОГГИРОВАНИЕ В СЕРВЕРНЫЙ RPT
} else { //ЕСЛИ ПОЛЕТЕЛ НЕ К ИГРОКУ, БУДЕТ ПРОСТО ЛЕТАТЬ ПО ТОЧКАМ, ПОКА НЕ СОБЬЮТ ИЛИ ПОКА НЕ ДОЛЕТИТ ДО ФИНАЛЬНОЙ
for «_x» from 1 to 10 do
{
_preWaypointPos = [getMarkerPos «center», 0, 5000, 10, 0, 2000, 0] call BIS_fnc_findSafePos;
_wp = _aigroup addWaypoint [_preWaypointPos, 0];
_wp setWaypointType «MOVE»;
_wp setWaypointBehaviour «CARELESS»;
};
diag_log(format[«[ХЕЛИКРАШ]: %1 полетел кружить по карте», _crashName]); //ЭТУ СТРОКУ МОЖНО УДАЛИТЬ, ЕСЛИ НЕ ТРЕБУЕТСЯ ЛОГГИРОВАНИЕ В СЕРВЕРНЫЙ RPT
};
_dropPosition = [(_playerpos select 0),(_playerpos select 1),200];
if (_flyToPlayer) then { //ЕСЛИ ИЗНАЧАЛЬНО ЛЕТЕЛ К ИГРОКУ — НИЖЕ ОЖИДАНИЕ, КОГДА ПРИБЛИЗИТСЯ К ЕГО ПОЗИЦИИ. НУ И ДРУГИЕ ЧРЕЗВЫЧАЙНЫЕ СИТУАЦИИ. ЧТОБЫ ПРОДОЛЖИЛОСЬ ВЫПОЛНЕНИЕ СКРИПТА
waitUntil {(_crashwreck distance _dropPosition < 50) || !alive _crashwreck || (getPosATL _crashwreck select 2) < 5 || (damage _crashwreck) >= 1};
diag_log(format[«[ХЕЛИКРАШ]: %1 долетел до игрока или был сбит», _crashName]); //ЭТУ СТРОКУ МОЖНО УДАЛИТЬ, ЕСЛИ НЕ ТРЕБУЕТСЯ ЛОГГИРОВАНИЕ В СЕРВЕРНЫЙ RPT
};
if ((_flyToPlayer) && (alive _crashwreck)) then { //ЕСЛИ ИЗНАЧАЛЬНО ЛЕТЕЛ К ИГРОКУ И НЕ СБИЛИ, ТО СБРОСИТ КОРОБКУ ПОЧТИ НА ГОЛОВУ БЕДНОЙ КЕПКИ, В ДРУГОМ СЛУЧАЕ, КУСОК СКРИПТА ПРОПУСКАЕТСЯ И СБРОСА НЕ БУДЕТ
diag_log(format[«[ХЕЛИКРАШ]: %1 сбросил груз. Значит долетел», _crashName]); //ЭТУ СТРОКУ МОЖНО УДАЛИТЬ, ЕСЛИ НЕ ТРЕБУЕТСЯ ЛОГГИРОВАНИЕ В СЕРВЕРНЫЙ RPT
_aircraftpos = [_crashwreck] call FNC_GetPos;
_chute = createVehicle [«ParachuteMediumEast», _aircraftpos, [], 0, «FLY»];
_chutePos = getPos _chute;
_FlyingSupplyBox = createVehicle [«Supply_Crate_DZE», _chutePos, [], 0, «FLY»];
_FlyingSupplyBox attachTo [_chute, [0,0,0]];
_FlyingSupplyBox setVariable [«permaLoot»,true];
_FlyingSupplyBox setVariable [«ObjectID», «»];
_FlyingSupplyBox addEventHandler [«handleDamage», {false}];
_chute setVariable [«ObjectID», «»];
_smoke = «SmokeShellGreen» createVehicle (getPos _FlyingSupplyBox);
_smoke attachTo [_FlyingSupplyBox, [0,0,1]];
_var = floor((random 2) + 1);
while {getPos _FlyingSupplyBox select 2 > 4} do
{
_chute SetVelocity [0,0,-5];
uiSleep 0.1;
};
detach _FlyingSupplyBox;
while {getPos _FlyingSupplyBox select 2 > 0} do {
_FlyingSupplyBox setPos [getPos _FlyingSupplyBox select 0, getPos _FlyingSupplyBox select 1, (getPos _FlyingSupplyBox select 2) — .25]
};
deleteVehicle _chute;
_posATL = getPosATL _FlyingSupplyBox;
_mapLootPos = mapGridPosition getPos _FlyingSupplyBox;
deleteVehicle _FlyingSupplyBox;
_SupplyBox = «Supply_Crate_DZE» createVehicle _posATL;
_SupplyBox setVariable [«permaLoot»,true];
_SupplyBox enableSimulation false;
if (DZE_MissionLootTable) then {
dgx_itemTypes = [] + getArray (missionConfigFile >> «CfgBuildingLoot» >> _randomLoot >> «lootType»);
} else {
dgx_itemTypes = [] + getArray (configFile >> «CfgBuildingLoot» >> _randomLoot >> «lootType»);
};
_CBLBase = dayz_CBLBase find (toLower(_randomLoot));
_weights = dayz_CBLChances select _CBLBase;
_cntWeights = count _weights;
_num = (round(random 12)) + 12;
for «_x» from 1 to _num do {
_maxLootRadius = (random 4) + 4;
_lootPos = [_posATL, _maxLootRadius, random 360] call BIS_fnc_relPos;
_index1 = floor(random _cntWeights);
_index2 = _weights select _index1;
_itemType = dgx_itemTypes select _index2;
[_itemType select 0, _itemType select 1, _lootPos, 5] call spawn_loot;
diag_log(format[«[ХЕЛИКРАШ СБРОС КОРОБКИ]: %1 сбросил груз из %2 на позиции @%3», _crashName, _randomLoot, _mapLootPos]); //ЭТУ СТРОКУ МОЖНО УДАЛИТЬ, ЕСЛИ НЕ ТРЕБУЕТСЯ ЛОГГИРОВАНИЕ В СЕРВЕРНЫЙ RPT
};
_nearby = _dropPosition nearObjects [«ReammoBox», sizeOf(«Supply_Crate_DZE»)];
{
_x setVariable [«permaLoot»,true];
} count _nearBy;
//_textPos = format [«Воздушный транспорт сбросил груз на координтах %1.», _mapLootPos];
//RemoteMessage = [«radio»,_textPos];
//publicVariable «RemoteMessage»;
//ЗДЕСЬ МОЖНО РАЗМЕСТИТЬ ОПОВЕЩЕНИЕ ИГРОКАМ О СБРОСЕ ГРУЗА, В КАЧЕСТВЕ ПРИМЕРА, ПРИВЕДЕНО СООБЩЕНИЕ, ВЫВОДЯЩЕЕСЯ ПРИ ПОМОЩИ REMOTE MESSAGE ИЗ МОДА WAI 2.2.0
//_mapLootPos — ПОКАЖЕТ КВАДРАТ, В КОТОРОМ СБРОШЕНА КОРОБКА.
};
_wp2 = _aigroup addWaypoint [position _landingzone, 0];
_wp2 setWaypointType «MOVE»;
_wp2 setWaypointBehaviour «CARELESS»;
_wp2 setWaypointStatements [«true», «_crashwreck setdamage 1;»];
_wp3 = _aigroup addWaypoint [[0,16000,0], 0];
_wp3 setWaypointType «CYCLE»;
_wp3 setWaypointBehaviour «CARELESS»;
waitUntil {(_crashwreck distance _position) <= 1000 || !alive _crashwreck || (getPosATL _crashwreck select 2) < 5 || (damage _crashwreck) >= 1};
_crashwreck flyInHeight 100;
_crashwreck forceSpeed 100;
_crashwreck setspeedmode «NORMAL»;
waitUntil {(_crashwreck distance _position) <= 500 || !alive _crashwreck || (getPosATL _crashwreck select 2) < 5 || (damage _crashwreck) >= 1};
deletevehicle _helipilot;
_crashwreck setHit [«mala vrtule», 1];
_ran15 = random 15;
_crashwreck setVelocity [_ran15,_ran15,-25];
_crashwreck setdamage .9;
waitUntil{uiSleep 1; getpos _crashwreck select 2 <= 30};
_helipilot setdamage 1;
_crashwreck setVelocity [_ran15,_ran15,-20];
waitUntil{uiSleep 1; getpos _crashwreck select 2 <= 10};
_crashwreck setdamage 1;
waitUntil{uiSleep 1; getpos _crashwreck select 2 <= 5};
diag_log(format[«[ХЕЛИКРАШ ПАДЕНИЕ]: %1 упал на позиции %2!», _crashName, getpos _crashwreck]); //ЭТУ СТРОКУ МОЖНО УДАЛИТЬ, ЕСЛИ НЕ ТРЕБУЕТСЯ ЛОГГИРОВАНИЕ В СЕРВЕРНЫЙ RPT
_pos = [getpos _crashwreck select 0, getpos _crashwreck select 1,0];
_dir = getdir _crashwreck;
deletevehicle _landingzone;
_isWater = surfaceIsWater [getpos _crashwreck select 0, getpos _crashwreck select 1];
if(_isWater) then {
//ЗДЕСЬ МОЖНО РАЗМЕСТИТЬ ОПОВЕЩЕНИЕ, ЧТО ВОЗДУШНЫЙ ТРАНСПОРТ УПАЛ В ВОДУ. И НА ЭТОМ СКРИПТ ЗАКОНЧИТ СВОЮ РАБОТУ.
} else { //ЕСЛИ ВСЁ ХОРОШО, ТО НА МЕСТЕ КРУШЕНИЯ СПАВНИТСЯ ЛУТ ИЗ ТАБЛИЦЫ «HeliCrash». ЕСЛИ ХОЧЕТСЯ РАНДОМА, МОЖНО НИЖЕ ВСЕ ТРИ «HeliCrash» ЗАМЕНИТЬ НА _randomLoot
_num = round(random 12) + 12;
if (DZE_MissionLootTable) then {
dgx_itemTypes = [] + getArray(missionConfigFile >> «CfgBuildingLoot» >> «HeliCrash» >> «lootType»);
} else {
dgx_itemTypes = [] + getArray(configFile >> «CfgBuildingLoot» >> «HeliCrash» >> «lootType»);
};
_CBLBase = dayz_CBLBase find(toLower(«HeliCrash»));
_weights = dayz_CBLChances select _CBLBase;
_cntWeights = count _weights;
for «_x» from 1 to _num do
{
_maxLootRadius = (random 20) + 10;
_lootPos = [_pos, _maxLootRadius, random 360] call BIS_fnc_relPos;
_index1 = floor(random _cntWeights);
_index2 = _weights select _index1;
_itemType = dgx_itemTypes select _index2;
[_itemType select 0, _itemType select 1, _lootPos, 5] call spawn_loot;
diag_log(format[«[ХЕЛИКРАШ СПАВН ЛУТА]: %1 упал на позиции %2», _crashName, _lootPos]); //ЭТУ СТРОКУ МОЖНО УДАЛИТЬ, ЕСЛИ НЕ ТРЕБУЕТСЯ ЛОГГИРОВАНИЕ В СЕРВЕРНЫЙ RPT
_nearby = _pos nearObjects [«ReammoBox», 20];
{
_x setVariable [«permaLoot»,true];
} forEach _nearBy;
};
//ЗДЕСЬ МОЖНО РАЗМЕСТИТЬ ОПОВЕЩЕНИЕ ИГРОКАМ, О ТОМ, ЧТО БОРТ УПАЛ. ДАЛЕЕ ПОЯВИТСЯ МАРКЕР, НО ОСТАТКИ СГОРЕВШЕГО БОРТА, БУДУТ РАСПОЛАГАТЬСЯ НЕ ТОЧНО ПО ЦЕНТРУ МАРКЕРА, ИБО ПУСТЬ ИЩУТ
_marker_position = [_pos,0,400,0,1,2000,0] call BIS_fnc_findSafePos;
waitUntil
{
_marker = createMarker [ format [«loot_event_marker_%1», _startTime], _marker_position];
_marker setMarkerColor «ColorRed»;
_marker setMarkerShape «ELLIPSE»;
_marker setMarkerAlpha 0.5;
_marker setMarkerSize [400,400];
_marker setMarkerText _crashName;
_mdot = createMarker [format [«dot_%1», _startTime], _marker_position];
_mdot setMarkerColor «ColorBlack»;
_mdot setMarkerType «hd_destroy»;
_mdot setMarkerText (format[«Место крушения: %1», _crashName]); //ТЕКСТ КОТОРЫЙ БУДЕТ ОТОБРАЖАТЬСЯ НА МАРКЕРЕ, С НАЗВАНИЕМ УПАВШЕГО БОРТА
uiSleep 10;
deleteMarker _marker;
deleteMarker _mdot;
_playerPresent = false;
{
if((isPlayer _x) && (_x distance _pos <= 25)) then {
_playerPresent = true;
_finder = name _x;
};
} foreach playableUnits;
(_playerPresent)
};
deleteMarker _marker; //НЕ УВЕРЕН, НАДО ЛИ ДУБЛИРОВАТЬ УДАЛЕНИЕ МАРКЕРОВ, ИБО НЕ СПЕЦ. НЕ ЗНАЮ. НО НЕ МЕШАЕТ (ЭТА СТРОКА И НИЖЕ).
deleteMarker _mdot;
//МАРКЕР БУДЕТ ПЕРЕСОЗДАВАТЬСЯ КАЖДЫЕ 10 СЕКУНД, ЧТОБЫ ВСЕ ИГРОКИ ЕГО ВИДЕЛИ, ДАЖЕ ПОСЛЕ ПЕРЕЗАХОДА. БУДЕТ ОТОБРАЖАТЬСЯ ДО ТЕХ ПОР, ПОКА К СГОРЕВШЕМУ БОРТУ НЕ ПОДОЙДЁТ ИГРОК
//ЗДЕСЬ МОЖНО РАЗМЕСТИТЬ ОПОВЕЩЕНИЕ ИГРОКАМ, О ТОМ ЧТО ХЕЛИКРАШ НАЙДЕН
diag_log(format[«[ХЕЛИКРАШ КОНЕЦ]: Обнаружен игроком %1. Ивент выполнен!» , _finder]); //ЭТУ СТРОКУ МОЖНО УДАЛИТЬ, ЕСЛИ НЕ ТРЕБУЕТСЯ ЛОГГИРОВАНИЕ В СЕРВЕРНЫЙ RPT
};
2. Закинуть файл ИМЯ_ФАЙЛА.sqf в папку @DayZ_Epoch_Serveraddonsdayz_servermodules
3. Добавить в init.sqf в EpochEvents, внутри [], код [«any»,»any»,»any»,»any»,30,»ИМЯ_ФАЙЛА»], не забыв поставить запятую после предыдущего ивента.
Пример: EpochEvents = [[«any»,»any»,»any»,»any»,10,»другой_ивент»],[«any»,»any»,»any»,»any»,30,»ИМЯ_ФАЙЛА»]];
Что происходит и как это работает:
— По заданному в init.sqf промежутку времени, вылетает вертолёт/самолёт;
— Если есть игроки и выбранная цель из всех юнитов игрок, то воздушный транспорт направляется к его позиции;
— Долетев до позиции игрока, «сбрасывает» ящик на парашюте и продолжает свой маршрут по точкам;
— После приземления, вокруг ящика спавнится лут. Да и сам ящик можно разобрать;
— Если изначально цель не игрок, то борт сразу полетит кружить по карте;
— Отлетав определённое количество точек, пойдёт на финальную, разобьётся и вокруг него отспавнится лут, с отображением информации на карте маркером;
— Маркер будет отображаться до тех пор, пока кто либо из игроков не подойдёт к крашу;
В принципе, функционал двух скриптов в одном, как оно и было, ничего экстраординарного.
Я лишь внёс пару проверок и поправок:
— Если игроков нет на сервере, то работа скрипта прекращается;
— Скрипт отработает всегда (в оригинале, только если выбранная цель — игрок). В моём случае, он стартанёт всегда, но если выбранная цель не игрок, то просто отработает, как анимированный хеликраш, без сброса груза;
— Маркер будет отображаться даже после перезахода игрока на сервер. Пересоздаётся раз в 10 секунд. Увы, более ювелирных способов не нашёл. В миссиях WAI, маркеры вообще раз в секунду пересоздаются. Тут работает по тому же принципу;
— Если борт сбить, на любом этапе, он упадёт и лут отспавнится вокруг него, с отображением маркера;
— Читайте комментарии в скрипте, если хотите добавить оповещения игрокам о старте, сбросе груза, падении борта.
Автор |
mikeprimm, FrozenCow2 |
---|---|
Платформа |
JRE |
Написано на |
Java |
Дата выпуска |
30 августа 2011 г. |
Последняя версия |
v3.2.1 |
Размер |
6.83 МБ |
Лицензия |
Apache License version 2.0 |
Исходный код |
Доступен |
Совместимо с |
до 1.17.1 |
Поддержка Нижнего мира |
Есть |
Ссылки |
Форум Веб-сайт |
DynMap — это плагин для сервера под управлением Bukkit. Он нарисует карту вашего сервера Minecraft прямо в браузере, наподобие привычного Google Maps. Он очень прост в установке, так как веб-сервер встроенный в DynMap работает прямо из коробки, хотя всё также есть возможность интеграции карты с существующим сайтом на своем веб-сервере, например Apache. Гибкость DynMap позволяет рисовать ваш мир, используя различные технологии построения, тем самым поставив упор на быстродействие, либо наоборот на проработку высокой детализации.
В зависимости от ваших требований к DynMap, встроенные компоненты позволят вам добавлять/удалять ту или иную функциональность. Сейчас DynMap поставляется с такими компонентами, которые добавляют поддержку чата с воздушными шарами, переписку через веб + интеграция с HeroChat, а также отображение на карте регионов созданных в WorldGuard, Residence и Towny.
Основные возможности
- Настраиваемые карты для каждого мира
- Прорисовка карт в режиме реального времени
- Отображение лиц игроков на карте
- В браузере можно чатиться с игроками
- А их сообщения отображаются в облачках (а-ля комикс) или в обычном чате
- На карте отображается текущее время Minecraft
- На карте отображается текущая погода Minecraft
- На карте могут отображаться регионы, созданные при помощи WorldGuard, Residence и Towny
- Ну и конечно, всё это добро легко конфигурируется и настраивается
Установка
Распакуйте архив dynmap-*-bin.zip в папку «plugins».
Если вы обновляете плагин, то согласитесь перезаписать все файлы.
Если у вас запущен отдельный веб-сервер (например Apache), то скопируйте файлы из «plugins/dynmap/web/» в корень «http-root». При следующем обновлении плагина, не забудьте обновить только что скопированные файлы на веб-сервер.
Первый запуск
После запуска на сервере CraftBukkit, вы можете проверить работу плагина в браузере по адресу http://ipсервера:8123/. В случае если вы запустили CraftBukkit на своём компьютере, то он откроется и по адресу http://localhost:8123/. На загруженной странице вы должны увидеть игроков, разумеется только тех, которые находятся в игре. Обратите внимание что карты ещё нет, поэтому фон будет чёрным.
Если вы хотите карту с высокой детализацией, то сейчас самый удачный момент сделать это. Просто включите (раскомментируйте) опцию deftemplatesuffix: hires
в одной из верхних строк файла configuration.txt. Более подробную информацию об опции deftemplatesuffix
вы найдёте в разделе о настройках плагина.
Если вы просто хотите посмотреть как работает DynMap, то просто введите в игре команду: /dynmap fullrender
. Ниже вы найдете более подробную информацию о командах и уровнях доступа, а пока у нас только первый запуск :). Тем временем карта будет постепенно проявляться в вашем браузере, не надо спешить, дайте ей время загрузиться. Сообщения в игре будут вас информировать о текущем состоянии работы плагина, с итоговой оценкой скорости рендеринга (прорисовки) карты.
Часто задаваемые вопросы
Вопрос: Почему чат отображает вместо русских символов кракозябры?
Ответ: Обновите версию плагина, в новых версиях кириллица отображается корректно.
Вопрос: Я только что изменил конфигурацию плагина, но никаких изменений на карте не вижу?
Ответ: Попробуйте перезапустить сервер или ввести команду /dynmap reload
. Если это не поможет, то анализируйте логи сервера (server.log) на предмет ошибок.
Вопрос: Как я могу разместить DynMap на своем веб-сервере, если он находится на том же компьютере?
Ответ: Если ваш веб-сервер находится на том же компьютере что и CraftBukkit, то используйте руководство по настройке DynMap без встроенного веб-сервера(англ.)
Вопрос: Как мне обеспечить доступ к карте для всех, если у меня нет своего веб-сервера?
Ответ: Просто откройте TCP порт № 8123 со своего сервера CraftBukkit, это позволит всем желающим зайти на DynMap. Для более высокой безопасности, всё же лучше использовать веб-сервер (например Nginx или Apache), который займется проксированием трафика DynMap.
Вопрос: Как я могу разместить DynMap на веб-сервере, если он находится на другом компьютере?
Ответ: Проброс портов описанный выше всё ещё может помочь в вашей проблеме. Но если это в вашей реализации невозможно, или вы просто хотите разгрузить свой сервер, то решением может стать периодическая синхронизация данных plugin/dynmap/web
между сервером CraftBukkit и внешним веб-сервером, использую RSync или FTP. Конечно потеряется вся прелесть онлайн обновлений: карт, игроков, чата и т. д.
Если сервера у вас на Linux[1], то можно настроить режим реального времени, используя sshfs или fuseftp, смонтировав удалённую директорию web/standalone
вашего веб-сервера на ваш CraftBukkit сервер в plugins/dynmap/web/standalone
Вопрос: Как мне разместить DynMap на сайте?
Ответ: Для начала убедись что у всех открывается ссылка на DynMap. Если у вас настроен проброс портов, то ссылка должны быть типа http://внешнийIPадрес:8123. Если же DynMap размещён на веб-сервере, то адрес должен быть типа http://вашсайт/map/
Теперь, для размещения DynMap на вашем сайте можно воспользоваться тегом так жеiframe
. Так же, для вёрстки вам понадобится знание HTML, но если у вас стоит CMS, то всё упрощается введением всего лишь одной строки:
<iframe src="http://вашадрес:8123/" width="800" height="600" />
Вопрос: Как переключить карту на высокую детализацию?
Ответ: Для этого вам нужно включить HD прорисовку. Делается это очень просто, откройте файл plugins/dynmap/configuration.txt
, и раскомментируйте строку:
#deftemplatesuffix: hires
В итоге должно получиться так:
deftemplatesuffix: hires
Вопрос: Как мне изменить отображаемый порядок расположения миров в боковой панели?
Ответ: Откройте файл plugins/dynmap/worlds.txt
, и в разделе описания миров, после строки worlds:
запишите названия (который также открывает раздел описания мира) в любом порядке, этот порядок будет использоваться в боковой панели. Пример правильной конфигурации:
worlds: — name: world — name: world_nether — name: world_the_end
В этом примере используются имена миров «world», «world_nether» и «world_the_end».
Вопрос: Как изменить отображаемые названия миров?
Ответ: Откройте файл plugins/dynmap/worlds.txt
и в разделе описания мира, в поле title:
напишите желаемое название мира. Пример правильной конфигурации:
worlds: — name: world title: "Обычный мир" — name: world_nether title: "Нижний мир" — name: world_the_end title: "Край"
В этом примере используются имена миров «world», «world_nether» и «world_the_end». Так же, для того, что бы DynMap понимал русские символы, необходимо файл конфигурации редактировать в формате UTF-8. Сделать это можно, например при помощи текстового редактора Notepad++. По умолчанию, тот же Notepad++ сохраняет файлы в кодировке ANSI, поэтому, предварительно до редактирования файла, рекомендуется выбрать кодировку файла UTF-8 (Кодировки -> Кодировать в UTF-8).
Вопрос: Как скрыть мир из списка?
Ответ: Откройте файл plugins/dynmap/worlds.txt
и в разделе описания мира который вы хотите скрыть, напишите enabled: false
. Пример правильной конфигурации:
worlds: — name: world title: "Обычный мир" — name: world_nether title: "Нижний мир" enabled: false — name: world_the_end title: "Край" enabled: false
В этом примере оба мира «world_nether» и «world_the_end» будут скрыты, так как в их разделе описания мира имеется запись enabled: false
.
Вопрос: Как удалить карту пещер (слой Cave) при отключенном режиме высокой детализации (#deftemplatesuffix: hires
)?
Ответ: Сделайте копию файла plugins/dynmap/templates/normal.txt
с именем custom-normal.txt
. У вас должен появится файл plugins/dynmap/templates/custom-normal.txt
, откройте его и удалите следующие строки:
— class: org.dynmap.kzedmap.CaveTileRenderer name: cave title: "Cave" prefix: ct maximumheight: 127
Вопрос: Как удалить карту пещер (слой Cave) при включенном режиме высокой детализации (deftemplatesuffix: hires
)?
Ответ: Сделайте копию файла plugins/dynmap/templates/normal-hires.txt
с именем custom-normal-hires.txt
. У вас должен появится файл plugins/dynmap/templates/custom-normal-hires.txt
, откройте его и удалите следующие строки:
— class: org.dynmap.hdmap.HDMap name: cave title: "Cave" prefix: ct perspective: iso_SE_60_lowres shader: cave lighting: default mapzoomin: 3
Вопрос: Как можно скрыть на карте определённых игроков?
Ответ: Вам поможет команда /dynmap hide ИмяИгрока
, где «ИмяИгрока» — это имя игрока, которого вы хотите скрыть.
Вопрос: А как можно скрыть всех игроков, кроме определённых?
Ответ: Откройте файл plugins/dynmap/configuration.txt
и установите параметр display-whitelist
равным true
. Пример правильной конфигурации:
# Treat hiddenplayers.txt as a whitelist for players to be shown on the map? (Default false) display-whitelist: true
Теперь все игроки скрыты. Что бы отобразить определённого игрока достаточно ввести команду /dynmap show ИмяИгрока
Вопрос: Как отключить облачки чата?
Ответ: Откройте файл plugins/dynmap/configuration.txt
установите знак комментария #
в начале следующих строк:
— class: org.dynmap.ClientComponent type: chatballoon focuschatballoons: false
После изменений должно получится так:
# — class: org.dynmap.ClientComponent # type: chatballoon # focuschatballoons: false
Вопрос:В чате в место русских букв абракадабра(Как включить поддержку русского языка) ?
Ответ: Откройте файл plugins/dynmap/configuration.txt
и в параметре cyrillic-support: false
заменить на true
.
Настройки плагина
Идём в конфиг configuration.txt находящийся в /plugins/dynmap
Список некоторых параметров и их расшифровка:
renderinterval: используется для указания интервала обновления одного блока карты, который может быть изменён, например при воздействии на этот участок блока игроками. При задании слишком маленького значения, приведёт к чрезмерной нагрузке на сервер. По умолчанию, этот интервал равен 1-ой секунде. Большинство серверов могут работать с малыми значениями, вплоть до 0.2 секунд.
tiles-rendered-at-once: Сколько ядер юзать (по умолчанию 12 ядра)
hideores: true скрыть любые рудные блоки, вынуждая их отображаться как камень.
- — blockplaced: заставляет обновить тайлы, когда игрок размещает блок.
- — blockbreak: заставляет обновить тайлы, когда игрок разрушает блок.
- — blockburn: заставляет обновить тайлы, когда блок уничтожает огонь.
- — pistonmoved: этот триггер заставляет обновить тайлы, когда поршни двигают блоки.
- — explosion: заставляет обновить тайлы, когда блоки уничтожает взрыв (рекомендуется)
defaultzoom: настройка зума карты по умочанию
defaultworld: мир по умолчанию (по умолчанию world)
defaultmap: вид мира по умолчанию (по умолчанию flat)
sendhealth: отображать или нет здоровье игроков
hideifshadow: скрывать информацию об игроке, если значение уровня света установлена ниже 15 (0 = при полной темноте, 4 = под открытым ночным, 15 = при дневном свете)
Примечания
- ↑ Хотя пользователи Windows похоже тоже не обделены: существует аналогичный проект Dokan SSHFS
#1
lancelot981
-
- Пользователь
-
- 47 сообщений
Новичок
Отправлено 27 Май 2012 — 16:25
Многим известен плагин dynmap. Для тех кто не знает что за плагин поясняю это динамическая карта сервера.
Возможно ли поставить на майарену? Нужен дополнительный порт… Есть возможность его купить?
- Наверх
#2
splattered
Отправлено 28 Май 2012 — 6:53
возможно поставить! А зачем покупать порт о.О? он и так должен работать.
- Наверх
#3
LinuxDale
LinuxDale
-
- Пользователь
-
- 9 сообщений
Новичок
Отправлено 28 Май 2012 — 16:05
в конфиге дунмапа можно поменять порт, после этого карта начинает работать.
- Наверх
#4
cbr600rka
Отправлено 30 Май 2012 — 16:50
Вбей в гугл:настройка dynmap,у меня по началу тоже не работало
- Наверх
#5
VELVET
Отправлено 01 Июнь 2012 — 10:10
Нужен дополнительный порт… Есть возможность его купить?
Покупать его не нужно, если тебе не нужен стандартный порт динмапы.
1. Если тебе нужен стандартный порт (8123), тогда тебе нужно в панели управления своим аккаунтом на МайАрене подключить дополнительную услугу «Выделенный IP (стандартный порт». За 100 рублей в месяц ты получаешь отдельный адрес и забываешь про изменение портов в файлах настройки.
2. Если тебя устраивает любой порт, тогда тебе нужно зайти на свой сервер через FTP в директорию динмапы: /plugins/dynmap
И перезалить туда файлик «configuration.txt», предварительно изменив в нем порт со стандартного «8123» на любой свободный (49152–65535).
3. Где именно менять порт в файле настроек динмапы?
# The TCP-port the webserver will listen on.
webserver-port: 6847
Самый простой способ найти этот параметр в файле настроек — воспользоваться поиском по файлу.
Удачи!
- Наверх
#6
sharks
sharks
-
- Пользователь
-
- 4 сообщений
Новичок
Отправлено 02 Август 2012 — 8:58
Веб-файлов не совпадают с версии плагина: Все файлы должны быть той же версии (0.39-1163)
дайте ссылку на рабочий
- Наверх
#7
Exclusive
Exclusive
-
- Пользователь
-
- 44 сообщений
Новичок
Отправлено 04 Август 2012 — 8:12
Веб-файлов не совпадают с версии плагина: Все файлы должны быть той же версии (0.39-1163)
дайте ссылку на рабочий
Dynmap download
В конфиге замени стандартный порт на rcon порт своего сервера (На сколько я помню)
- Наверх