Jump to content
Search In
  • More options...
Find results that contain...
Find results in...
  • Need help?

    Create a topic in the appropriate section
    Don't write everything in the chat!
  • Take a look at the marketplace

    There you can buy
    everything related to game servers
  • Don't want a ban?

    Please read our rules
    Don't disturb the order!
  • Sell or buy?

    Use services of the guarantor
    We will make your deal safe
BenQ

Epoch Admin Tools V-1.10.7 для DayzEpoch 1.0.6.1+

Recommended Posts

Доброго времени суток уважаемые форумовчане!!!Представляю вашему вниманию админку для 1.0.6.1+(без проблем рабоотает и на 1.0.6.2)

Оригинальная статья тут https://epochmod.com/forum/topic/44821-epoch-admin-tools-1061/

GITHUB кода и инструкции:https://github.com/noxsicarius/Epoch-Admin-Tools/tree/TestBranch#epoch-admin-tools-v-1107(ВАЖНО!!!Если соберетись качать из ветки git то рекомендую качать из тестовой ветки т.к. она новее!!!)

 

 

Итак приступим : Качаем архив https://yadi.sk/d/pkV0STXV3ReVfs

 

1.Откройте init.sqf в корневой папке вашей миссии.

Непосредственно над этим:

initialized = true;

Вставьте следующие:

call compile preprocessFileLineNumbers "admintools\config.sqf"; // Epoch admin Tools config file

call compile preprocessFileLineNumbers "admintools\variables.sqf"; // Epoch admin Tools variables

 

2.Далее в этом же файле находим:

call compile preprocessFileLineNumbers "\z\addons\dayz_code\init\compiles.sqf";

И ниже вставляем:

call compile preprocessFileLineNumbers "dayz_code\init\compiles.sqf";

//Если же у вас уже имееться кастомный compiles.sqf , нужно просто совместить их//

 

3.Если вы используете стандартный антихак (execVM "\z\addons\dayz_code\system\antihack.sqf";),

то его нужно заменит вот этим :

// Epoch Admin Tools [] execVM "admintools\antihack\antihack.sqf"; // Epoch Antihack with bypass

//Если не используете то просто пропустите этот пункт//

 

4.Вставьте это строку внизу init.sqf

[] execVM "admintools\Activate.sqf"; // Epoch admin tools

 

5.Сохраните ваш файл

 

6.Откройте description.ext  и в самом низу файла вставьте:

#include "admintools\dialog.hpp"

 

7.Переместите или скопируйте папки dayz_code и admintools в папку вашей миссии.

//Если у вас уже есть эти папки в вашей миссии,то настоятельно рекомендую совместить файлы из папки архива с файлами в папке миссии//

//Проще всего перетащить compiles.sqf из @Dayz_Epoch\dayz_code.pbo\init\ и переподключить его в init.sqf//

//Если у вас установлена денежная система ZSC то наберитесь терпения и совметите файл compiles.sqf из архива и compiles из файла ZSC или же совместить их еще и с файлом из @Dayz_Epoch\dayz_code.pbo\init\ //

//Касательно keyboard.sqf нужно его взять из dayz_code\init и совместить и переподключить его в compiles.sqf//

//Если еще кто то не знает какими инструментами совмещать код в файлах приведу в пример этот: Плагин Compare для Notepad++//

 

8.Открываем admintools\config.sqf и находим:

EAT_superAdminList = [
    "999999999", // <player name>
    "999999999" // <player name>
    ];
    EAT_adminList = [
    "999999999", // <player name>
    "999999999" // <player name>
    ];
    EAT_modList = [
    "999999999", // <player name>
    "999999999" // <player name>
    ];

Здесь заменяем 9-ки ID который вам необходимо внести(думаю с супер админами,админами,модераторами сами разберетесь)

 

9.Касательно Battleye:

Если используете то заменяете(совмещаете) файлы из архива с вашими,

если нет пропускаете этот пункт.

 

10.Распакуйте ваш dayz_server.pbo находиться по адресу: Arma 2 Operation Arrowhead\@DayZ_Epoch_Server\addons\

Скопируйте файл EAT_vehSpawn.sqf находящийся в скачанном вами ранее архиве в папке dayz_server

в ваш dayz_server сохраняя путь установки.

 

11.Далее откройте init/server_functions.sqf находящийся в папке вашего сервера.Там находим:

spawn_vehicles = compile preprocessFileLineNumbers "\z\addons\dayz_server\compile\spawn_vehicles.sqf";

После этой строки добавляем:

// Epoch Admin Tools

EAT_vehSpawn = compile preprocessFileLineNumbers "\z\addons\dayz_server\compile\EAT_vehSpawn.sqf";

 

12.Открываем system/scheduler/sched_safetyVehicle.sqf и заменяем это:

if (vehicle _x != _x && !(vehicle _x in dayz_serverObjectMonitor) && !((typeOf vehicle _x) in DZE_safeVehicle)) then {

на это:

// Epoch Admin Tools

if (vehicle _x != _x && !(vehicle _x in dayz_serverObjectMonitor) && !((typeOf vehicle _x) in DZE_safeVehicle) && (vehicle _x getVariable ["EAT_Veh",0] !=1)) then {

 

13.Открываем compile/server_updateObject.sqf находим эту строку:

_objectID = _object getVariable ["ObjectID","0"];

Выше неё вставляем:

// Epoch Admin Tools

if (_object getVariable ["EAT_Veh",0] == 1) exitWith {};

 

14.DLL файлы находящиеся в папке DLL архива просто копируйте в папку армы там где находиться arma2oaserver.exe

 

На этом установка закончена.

 

Подробная настройка и конфигурирование админки можете прочесть здесь:https://github.com/noxsicarius/Epoch-Admin-Tools/wiki

Надеюсь гайд будет полезным.И да не судите строго это мой первый гайд)Всех благ вам в установке скриптов!!! 

 

 

 

 

 

Пожалуйста, Войдите или Зарегистрируйтесь, чтобы увидеть это: Вложение.

Share this post


Link to post
Share on other sites







В 99% стоит инфистары на сервера, кому это нужно вообще ? 3-4 Года назад может бы была популярна но не сейчас.

Share this post


Link to post
Share on other sites
55 минут назад, DimitriPokki сказал:

В 99% стоит инфистары на сервера, кому это нужно вообще ? 3-4 Года назад может бы была популярна но не сейчас.

Например для тех у кого нет денег на инфи

Share this post


Link to post
Share on other sites

BenQ у меня в админке он может только танцевать и не че не могу заспавнить 

Share this post


Link to post
Share on other sites
В 30.01.2018 в 01:53, BenQ сказал:

slava21s Версия Epoch какая?

 

Здравствуйте!А у меня торговцы разтроились и текстура у них тоже))Не знаете в чём проблема?

Share this post


Link to post
Share on other sites
В 28.01.2018 в 00:54, slava21s сказал:

BenQ у меня в админке он может только танцевать и не че не могу заспавнить 

Попробуй убить перса,мне помогло!)

Edited by max54 (see edit history)

Share this post


Link to post
Share on other sites
1 час назад, max54 сказал:

Здравствуйте!А у меня торговцы разтроились и текстура у них тоже))Не знаете в чём проблема?

Разобрался.

Share this post


Link to post
Share on other sites

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

UPD:Переустановил и всё заработало, я хз что это было, извините :D

Edited by ErenEger (see edit history)

Share this post


Link to post
Share on other sites

Всё установил, всё работает, в папке BattlEye всё поменял. Попробовал заспавнить коробку - кикнуло, потом не пускало на сервер, ладно, вроде разобрался, вроде пускает, но когда умираю кикиает с ошибкой BattlEye: Script Restriction #32
Кто подскажет, в чём проблема?

Share this post


Link to post
Share on other sites

где приложенные файлы scripts.txt и scripts.log ??

Мы же не знаем что у тебя в фильтрах прописано.

Share this post


Link to post
Share on other sites

А кто-нибудь может подсказать как машины спавнить, пожалуйста?

Share this post


Link to post
Share on other sites

да... видать руки не из того места растут. несколько раз пробовал ...ничего....  кикает батлай с ошибкой 36...может кто выложит  с установленным на чистом сервере Admin Tools.... папки  1 @DayZ_Epoch_Server    2  папку BattlEye с полным содержимым....остальное дело техники....пожалуста.....и за что блокировали сайт....что за........

 

я ничего не перепутал  эта версия будет работать на стим  1.0.6.2

Edited by nikos (see edit history)

Share this post


Link to post
Share on other sites

Да кому они нахрен сдались - админтулсы с менюшками на колесико мыши, если инфистаров 100500 гуляет в нете?

Share this post


Link to post
Share on other sites
5 часов назад, NoNameUltima сказал:

Да кому они нахрен сдались - админтулсы с менюшками на колесико мыши, если инфистаров 100500 гуляет в нете?

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

Share this post


Link to post
Share on other sites
1 минуту назад, nikos сказал:

.да и тем кто умеет считать

И тем кто не умеет гуглить. В свободном доступе их 100500.

Share this post


Link to post
Share on other sites
2 минуты назад, NoNameUltima сказал:

И тем кто не умеет гуглить. В свободном доступе их 100500.

 

Share this post


Link to post
Share on other sites
4 часа назад, NoNameUltima сказал:

И тем кто не умеет гуглить. В свободном доступе их 100500.

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

Share this post


Link to post
Share on other sites
6 часов назад, nikos сказал:

укажи на рабочую версию...раз вы умеете гуглить

 

11 час назад, nikos сказал:

.у меня стояла  не покупная а отсюда

 

Share this post


Link to post
Share on other sites
11 час назад, NoNameUltima сказал:
11 час назад, NoNameUltima сказал:

версия нынче другая...1.0.6.2

к ней кроме  как WAI 2.2.5 не смог ничего найти...

 

 

 

Share this post


Link to post
Share on other sites
1 час назад, nikos сказал:

 

Что за ху..ню ты тут откопировал и откуда? И при чем тут ВАИ? как впрочем и 1062?

Постов решил понабивать ?

Share this post


Link to post
Share on other sites
2 минуты назад, NoNameUltima сказал:

Что за ху..ню ты тут откопировал и откуда? И при чем тут ВАИ? как впрочем и 1062?

Постов решил понабивать ?

удали все...они мне не нужны ...видно помощи здесь не получу

 

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

  • Similar Content

    • By MrMiBl
      Всем привет! С наступающим!  
      Проблема такая: безсознанка очень долгая (от двух минут и больше от рандомной пульки...)
      Собственно вопрос: как её отключить либо сократить время?  
      покопавшись в файлах нашел такую тему: fn_unconscious.sqf
      // (c) facoptere@gmail.com, licensed to DayZMod for the community private ["_count","_anim","_weapon","_sprint","_stance","_transmove","_start","_timeout","_short","_sandLevel","_speed"]; if (r_player_unconsciousInProgress) exitWith {}; r_player_unconsciousInProgress = true; r_player_unconsciousInputDisabled = true; //this is like this in order to release the current user input disableUserInput true; disableUserInput true; disableUserInput false; disableUserInput false; disableUserInput true; disableUserInput true; _start = diag_tickTime; _timeout = abs r_player_timeout; _short = _timeout < 4; if (!_short) then { 4 cutRsc ["playerStatusWaiting", "PLAIN",1]; playSound "heartbeat_1"; }; _count = 0; // can be set to false by medEPI.sqf, during the 'while' loop r_player_unconscious = true; player setVariable ["NORRN_unconscious", r_player_unconscious, true]; _sandLevel = ctrlPosition ((uiNamespace getVariable 'DAYZ_GUI_waiting') displayCtrl 1400); //diag_log [(diag_tickTime - _start) < _timeout , !r_player_unconscious , alive player ]; dayz_autoRun = false; if (player == vehicle player) then { player playAction "CanNotMove"; }; "dynamicBlur" ppEffectEnable true;"dynamicBlur" ppEffectAdjust [2]; "dynamicBlur" ppEffectCommit 0; "colorCorrections" ppEffectEnable true;"colorCorrections" ppEffectEnable true;"colorCorrections" ppEffectAdjust [1, 1, 0, [1, 1, 1, 0.0], [1, 1, 1, 0.1], [1, 1, 1, 0.0]];"colorCorrections" ppEffectCommit 0; if (dayz_soundMuted) then {call player_toggleSoundMute;}; // hide icon before fadeSound 0 fadeSound 0.05; while { (diag_tickTime - _start) < _timeout and r_player_unconscious and alive player } do { player setVariable ["unconsciousTime", _timeout - diag_tickTime + _start, (_count % 10) == 0]; if (!_short) then { _sandLevel set [ 3, 0.136829 * safezoneH * (diag_tickTime - _start) / _timeout ]; ((uiNamespace getVariable 'DAYZ_GUI_waiting') displayCtrl 1400) ctrlSetPosition _sandLevel; ((uiNamespace getVariable 'DAYZ_GUI_waiting') displayCtrl 1400) ctrlCommit 0.05; }; /*_veh = vehicle player; if ((player != _veh) and {(_veh iskindOf "LandVehicle")}) then { _speed = [0,0,0] distance velocity _veh; if (_speed > 10) then { _veh engineOn false; } else { player action ["eject", _veh]; player leaveVehicle _veh; [] spawn { uiSleep 0.1; player playMoveNow "amovppnemstpsnonwnondnon"; }; // instant prone }; }; if (player == _veh) then { player setVelocity [0,0,0]; }; */ uiSleep 0.1; _count = _count + 1; }; if (!_short) then{ 4 cutRsc ["default", "PLAIN",0]; }; r_player_unconscious = false; player setVariable ["NORRN_unconscious", r_player_unconscious, true]; r_player_timeout = 0; player setVariable ["unconsciousTime", r_player_timeout, true]; r_player_cardiac = false; player setVariable ["USEC_isCardiac",r_player_cardiac, true]; r_player_unconsciousInProgress = false; 4 cutRsc ["default", "PLAIN",1]; if (player == vehicle player) then { // "AinjPpneMstpSnonWnonDnon" rolls from back first (jarring transition if player was knocked out prone or fell to stomach) [nil, player, rSWITCHMOVE, "AmovPpneMstpSnonWnonDnon_healed"] call RE; player SWITCHMOVE "AmovPpneMstpSnonWnonDnon_healed"; PVDZ_plr_SwitchMove = [player,"AmovPpneMstpSnonWnonDnon_healed"]; publicVariableServer "PVDZ_plr_SwitchMove"; //Needed to execute switchMove on server machine. rSwitchMove only executes on other clients player playMoveNow "AmovPpneMstpSnonWnonDnon_healed"; }; 10 fadeSound 1; "dynamicBlur" ppEffectAdjust [0]; "dynamicBlur" ppEffectCommit 5; "colorCorrections" ppEffectAdjust [1, 1, 0, [1, 1, 1, 0.0], [1, 1, 1, 1], [1, 1, 1, 1]];"colorCorrections" ppEffectCommit 5; if ({getNumber (configFile >> "CfgWeapons" >> _x >> "type") in [1,2]} count (weapons player) > 0) then { //Prevent firing while weapon is still shown on back or holstered. AmovPpneMstpSnonWnonDnon_healed has disableWeapons=0 in config (should be 1) waitUntil {uiSleep 1; !(animationState player in ["ainjppnemstpsnonwnondnon_rolltofront","amovppnemstpsnonwnondnon_healed","amovppnemstpsnonwnondnon"])}; }; //once more to be safe disableUserInput false; disableUserInput false; disableUserInput true; disableUserInput true; disableUserInput false; disableUserInput false; r_player_unconsciousInputDisabled = false; //diag_log [ __FILE__, diag_tickTime, "done" ]; Копать тут или где-то в другом месте?
    • By 123new
      Много вопросов на данную тему наблюдаю от новичков, попробую прояснить немного сей вопрос.
       
      Предположим. что вы уже знаете на каких координатах вам надо спавнить определенное здание или объект\животное\бота, с каким углом поворота. И так. эта тема для вас.
       
      Сразу делаю пометку, метод, который добавили нам разработчики игры в патче 1.15, очень хорошо описал наш товарищ в сообщении форума:
      Рекоммендую вам использовать именно его!
      Ниже опубликованы старые методы.
       
      Если вы с расставили их с модифицированной версии Offline (Offline by Arksenor это называется), то вы получили и нашли код вида:
      GetGame().CreateObject("Land_CementWorks_ExpeditionB", "13251.875000 0.0 3748.525879").SetOrientation("-96.000000 0.000000 0.000000"); GetGame().CreateObject("Land_CementWorks_ExpeditionB", "13254.599609 0.0 3722.703613").SetOrientation("-96.000000 0.000000 0.000000"); GetGame().CreateObject("Land_CementWorks_ExpeditionB", "13257.344727 0.0 3696.718750").SetOrientation("-96.000000 0.000000 0.000000"); GetGame().CreateObject("Land_CementWorks_ExpeditionB", "13260.040039 0.0 3670.984131").SetOrientation("-96.000000 0.000000 0.000000"); GetGame().CreateObject("Land_CementWorks_ExpeditionB", "13262.756836 0.0 3645.180176").SetOrientation("-96.000000 0.000000 0.000000"); GetGame().CreateObject("Land_CementWorks_ExpeditionB", "13265.441406 0.0 3619.531982").SetOrientation("-96.000000 0.000000 0.000000"); GetGame().CreateObject("Land_CementWorks_ExpeditionB", "13268.124023 0.0 3593.995361").SetOrientation("-96.000000 0.000000 0.000000"); GetGame().CreateObject("Land_CementWorks_ExpeditionB", "13270.844727 0.0 3568.186523").SetOrientation("-96.000000 0.000000 0.000000"); GetGame().CreateObject("Land_CementWorks_ExpeditionB", "13273.514648 0.0 3542.561279").SetOrientation("-96.000000 0.000000 0.000000"); GetGame().CreateObject("Land_CementWorks_ExpeditionB", "13276.195313 0.0 3517.048828").SetOrientation("-96.000000 0.000000 0.000000"); GetGame().CreateObject("Land_CementWorks_ExpeditionB", "13278.399414 0.0 3496.097900").SetOrientation("-96.000000 0.000000 0.000000"); Здесь (по примеру первой строки) 1 значение в скобках - id постройки/объекта, 2 значение - координаты в формате X Y Z, разделенные пробелом, 3 - значение поворота примерно в том же формате.
      Как это делать в Offline - статья от автора Offine:
      https://github.com/Arkensor/DayZCommunityOfflineMode/wiki/Add-custom-objects-to-your-server-or-mission
       
      И так, инструкция:
      1. Добавляем в начало init.c файла в вашей mpmissions следующий код:
      #include "$CurrentDir:mpmissions\dayzOffline.chernarusplus\spawn_buildings.c" 2. Создаем в папке вашей активной mpmissions файлик spawn_buildings.c и заполняем его следующей информацией.
      void SpawnObject( string type, vector position, vector orientation ) { private string NameBlockLog = "[CreateObject] "; private string InfoLog = ""; if(type != "") { auto obj = GetGame().CreateObject( type, "0 0 0" ); if(obj) { if ((position[0] != 0) && (position[1] != 0) && (position[2] != 0)) { obj.SetPosition( position ); obj.SetOrientation( orientation ); obj.Update(); if (obj.CanAffectPathgraph()) { obj.SetAffectPathgraph(true, false); GetGame().GetCallQueue(CALL_CATEGORY_SYSTEM).CallLater(GetGame().UpdatePathgraphRegionByObject, 100, false, obj); } InfoLog = "[Type: '" + obj.GetType() + "' Position: '" + obj.GetPosition().ToString() + "' Orientation: '" + obj.GetOrientation().ToString() + "']"; Write_Log(NameBlockLog + " Object has been created successfully! Info " + InfoLog); } else { InfoLog = "[Type: '" + type + "' Position: '" + position + "' Orientation: '" + orientation + "']"; Write_Log(NameBlockLog + " Object can't be created! Incorrect writed position. Info " + InfoLog); } } else { InfoLog = "[Type: '" + type + "' Position: '" + position + "' Orientation: '" + orientation + "']"; Write_Log(NameBlockLog + " Object can't be created! Info " + InfoLog); } } else { InfoLog = "[Type: '" + type + "' Position: '" + position + "' Orientation: '" + orientation + "']"; Write_Log(NameBlockLog + " Object can't be created! Incorrect writed type. Info " + InfoLog); } } void Write_Log(string message) { Print(String(message)); } 3. Открываем созданный нами файл,  и в конце файла дописываем следующее:
      void SpawnAirfeeldBuildings() { SpawnObject( "Land_CementWorks_ExpeditionB", "13251.875000 0.0 3748.525879", "-96.000000 0.000000 0.000000"); SpawnObject( "Land_CementWorks_ExpeditionB", "13254.599609 0.0 3722.703613", "-96.000000 0.000000 0.000000"); SpawnObject( "Land_CementWorks_ExpeditionB", "13257.344727 0.0 3696.718750", "-96.000000 0.000000 0.000000"); } void SpawnKrasnoBuildings() { SpawnObject( "Land_CementWorks_ExpeditionB", "13251.875000 0.0 3748.525879", "-96.000000 0.000000 0.000000"); SpawnObject( "Land_CementWorks_ExpeditionB", "13254.599609 0.0 3722.703613", "-96.000000 0.000000 0.000000"); SpawnObject( "Land_CementWorks_ExpeditionB", "13257.344727 0.0 3696.718750", "-96.000000 0.000000 0.000000"); } Где после void - название функции идет, а между открытыми скобками вызов спавна самих зданий на указанных координатах.
      На примере 1 строки:
      Land_CementWorks_ExpeditionB - id постройки (type)
      13251.875000 0.0 3748.525879 - координаты в формате X Y Z
      -96.000000 0.000000 0.000000 - значение поворота в формате X Y Z
      Внимание: id постройки и координаты в примере указаны не верные и требуют подключения дополнительной модификации для корректной работы!!! Координаты не соответствуют названию функции!!!
      4. открываем в MpMissions в папке с вашей активной миссией init.c и перед ЗАКРЫВАЮЩЕЙ скобкой '}' дописываем нужную нам функцию (это будет активация спавна на карте):
      SpawnAirfeeldBuildings(); 5. Готово, Запускайте сервер, и в scripts.log вы увидите процедуру спавна ваших зданий и увидите, спавнятся ли они на карте или нет.
      Можно написать конечно и более готовую, универсальную систему спавна на карте со считыванием конфигурации из файла, но я считаю это лишним.
       
      Как заполнить добавленные здания лутом на карте:
      вариант 1:
      https://github.com/Arkensor/DayZCommunityOfflineMode/wiki/Enable-loot-for-custom-placed-objects
      вариант 2: вручную заполнить xml-файл  mapgrouppos.xml в mpmssions данными о местоположении зданий, где rpy - значение поворота здания в формате Z Y X
       
      С помощью данной статьи вы можете разместить любой элемент игры(постройку, животное, зомби, бота), доступный к спавну через любую модификацию-админ. панель. Очень полезный мод в этом смысле BuilderItems, с его помощью можно творить поистину интересные локации!
    • By Venom21
      Появилась такая проблема, нужно закрыть некоторые слоты под одежду, когда на определённый слот одет предмет…
      пример: возьмём экзоскелет от Фидова, там есть две версии которая одеваеться как на тело и ноги, и есть которая одеваться на разгрузку и пояс, так вот, нужно например чтобы при одетом экзаче на тело и ноги слоты под пояс и разгрузку блокировались, либо только под определенные предметы, если есть интерес то цену можем в личке обсудить…
      P.S. Разрешение от Фидова на переделку и переупаковку есть)
    • By CubeIn
      Здарова, уважаемые знатоки, вопрос.
      Мне скриптер скинул скрипт и сказал закинуть её в северную часть, но не указал куда именно. Подскажите пожалуйста, куда мне её деть? 
    • By CubeIn
      Здарова всем!
      У меня срочный вопрос опытным хозяинам серверостроения. Есть ли возможность настроить холод на карте Namalsk? А то слишком холодновато игрокам, а где это настраивать...
  • Our picks

×
×
  • Create New...

Important Information

By using this site, you automaticly agree to our Guidelines and Privacy Policy.
We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.