И снвова здравствуйте, товарищи!
Думаю, многие из вас уже натыкались на BookMenu в сборках серверной части 0.62 в сети, но большинство не смогло их установить. В данной теме я опишу гайд, который поможет вам установить похожее меню на свой сервер, созданный на основе серверных файлов моей сборки:
Начнем:
1. Скачиваем архив: https://yadi.sk/d/tLLdv6vJRoYThQ
https://mega.nz/#!6CoyiCbY!FlMeng4M3ZtSQk1ttjim1-AD-_J8AerXrqK7VK0FWRI
AdminBookMenu062.rar
2. Помещаем файл AdminBook.c по пути: scripts\4_World\Entities\ItemBase
3. Открываем в Notepad++: scripts\4_World\Entities\ManBase\PlayerBase.c 4. Находим:
void OnGetActions (ActionMenuContext ctx, Man player)
{
super.OnGetActions(ctx, player);
if ( GetDayZGame().IsNewPlayer() && GetGame().IsServer() && m_ActionManager ) m_ActionManager.OnGetActions(ctx);
}
И меняем на
void OnGetActions (ActionMenuContext ctx, Man player)
{
super.OnGetActions(ctx, player);
if ( GetDayZGame().IsNewPlayer() && GetGame().IsServer() && m_ActionManager ) m_ActionManager.OnGetActions(ctx);
float mySwitch;
player.GetVariable ("toggleFreeCamOptions", mySwitch);
if ( mySwitch == 1) //Shows actions on player only if switch is toggled on//set to 1 if 0 then does not show it!
{
ctx.AddAction("EXIT", 1, NULL, 1, true, true);
// ctx.AddAction("TELEPORT TO PLAYER", 2, NULL, 1, true, true);
// ctx.AddAction("MY ACTION #3", 2, NULL, 1, true, true);
// ctx.AddAction("MY ACTION #4", 2, NULL, 1, true, true);
}
}
А также находим:
bool OnAction(int action_id, Man player, ParamsReadContext ctx)
{
super.OnAction(action_id, player, ctx);
if( GetDayZGame().IsNewPlayer() && action_id == 109 && GetGame().IsServer() && m_ActionManager) m_ActionManager.OnAction();
}
и меняем на
bool OnAction(int action_id, Man player, ParamsReadContext ctx)
{
super.OnAction(action_id, player, ctx);
if( GetDayZGame().IsNewPlayer() && action_id == 109 && GetGame().IsServer() && m_ActionManager) m_ActionManager.OnAction();
if ( GetGame().IsServer() )
{
switch (action_id)
{
case 1:
string PlayerAdmin;
player.GetVariable ( "PlayerName", PlayerAdmin );
string cameraCode = "{ if (name _x == '" + PlayerAdmin + "') then {(owner _x) SpawnForClient { _cam = 'camconstruct' camCreate [0,0,0]; _cam CameraEffect ['Terminate', 'Back']; camDestroy _cam; }; }; }forEach players;";
GetGame().ExecuteSQF(cameraCode);
player.SetVariable( "toggleFreeCamOptions", 0);
break;
case 2:
string freeCamTeleportPos;
player.GetVariable ( "freeCamTeleportPos", freeCamTeleportPos );
vector teleportLocation = freeCamTeleportPos.ToVector();
player.SetPosition(teleportLocation);
break;
};
};
}
P.S. Это необходимые опции для выхода с режима наблюдения
5. Открываем файл: MPMissions\dayz_Auto.ChernarusPlus\scripts\init\init_newBody.sqf и находим строки:
playerBodies set [count playerBodies,_agent];
_agent setVariable ["UID",_uid];
Добавляем ниже строки
_agent setVariable ["toggleFreeCamOptions",0];
_agent setVariable ["freeCamTeleportPos",0];
Там же находим строку
myNotifiers = _agent getVariable ["myNotifiers",[]];
и добавляем ниже
_agent setVariable ["playerName",name _agent];
6. Открываем: scripts\DataBase\DataBase.h
И добавляем в конце файла следующее:
// InGame AdminMenu 'AdminBook' by 123new
static const string AdminMenu_adminList = "76561200555123705,UID4,UID5";
static const string AdminMenu_ModerList = "UID1,UID2,UID3";
Где, как вы уже догадались, в указанном формате UID модеров и админов на сервере
P.S. Соблюдайте, чтобы UID в списке админов не дублировался в списке модераторов, и наоборот
7. Запускаем сервер,добавляем в лут себе объект с id "BookTheThreeMusketeers" и проверяем то что мы сделали!
Меню будет на правой кнопке мышки на книжке, если вы прописали верно ваш UID.
У администрации доступно:
1. Изменение погоды
2. Выдача 3 наборов с лутом в качестве примера (сами потом редактируйте, на enscript) (при выдаче лута скидывайте книгу на землю!!!)
3. Наблюдение за игроками (дистанция ограничена дальностью отрисовки и синхронизации объектов на стороне клиента игры)
У модерации доступно:
1. Наблюдение за игроками (дистанция ограничена дальностью отрисовки и синхронизации объектов на стороне клиента игры)
Замеченные недостатки:
Поскольку меню работает по никам игроков, то возможны проблемы, поскольку некоторые символы могут не восприняться enscript текущей версии игры и вызывать проблемы скрипта.
Дальность наблюдения ограничена (см выше)
Поскольку Enscript 0.62 версии игры крайне сырой, возможны 'убегания' меню за экран
Где редактировать меню?
Все просто, тут весь код: scripts\4_World\Entities\ItemBase\AdminBook.c
Благодарности: Автору uhneb за его вариант с рабочим меню, которые сделал он, либо комьюнити, с которым он работал Работоспособность: DayZ 0.62
Возможно, можно сделать эти меню более граммотно с нынешними знаниями по 0.63, но я считаю это уже нецелесообразным!
Чужая наработка автора BorizK (за что и благодарим его) на базе этого меню:
Описание имеется там же несколькими сообщениями ниже!
Замечу, что данный гайд основывается именно на мою версию сборки серверных файлов игры DayZ 0.62, но не исключено, что может подходить и к вашим серверным файлам! Также, возможно дорабатывать и изменять опционал меню, используя привычные sqf-функции. Для этого создавайте эти функции в sqf из mpmission, а затем дорабатывайте само book-menu под нужные вам опции. Пример исполнения sqf-кода на enscript (только для dayz 0.62) имеется в опции наблюдения!