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
Alexis

[Гайд] Door Managment

Recommended Posts

Вообщем, нашел этот скрипт на просторах сети и решил перевести и поделится им с русскоязычным сообществом!

 

ТОЛЬКО ДЛЯ ПОЛЬЗОВАТЕЛЕЙ PLOT4LIFE!!!

 

 

Оригинал http://epochmod.com/forum/index.php?/topic/16807-release-30-door-management-no-more-codes/

 

Первое что понадобится это архив      https://yadi.sk/d/aXl3fi8AeaLCf

 

В файле description.ext внизу пишем

(Если будут проблемы с файлом defines.hpp просто первую строку!)

 

#include "doorManagement\defines.hpp"
#include "doorManagement\doorUnlock.hpp"
#include "doorManagement\doorManagement.hpp"
#include "doorManagement\ComboLockUI.hpp"

В compiles.sqf

 Выше

BIS_Effects_Burn = compile preprocessFile "\ca\Data\ParticleEffects\SCRIPTS\destruction\burn.sqf";

Добавляем это

 

/*DoorManagement Zupa*/
DoorGetFriends 		= compile preprocessFileLineNumbers "doorManagement\doorGetFriends.sqf";
DoorNearbyHumans 	= compile preprocessFileLineNumbers "doorManagement\doorNearbyHumans.sqf";
DoorAddFriend 		= compile preprocessFileLineNumbers "doorManagement\doorAddFriend.sqf";
DoorRemoveFriend 	= compile preprocessFileLineNumbers "doorManagement\doorRemoveFriend.sqf";
player_unlockDoor       = compile preprocessFileLineNumbers "doorManagement\player_unlockDoor.sqf";
player_unlockDoorCode = compile preprocessFileLineNumbers "doorManagement\player_unlockDoorCode.sqf";
player_manageDoor       = compile preprocessFileLineNumbers "doorManagement\initDoorManagement.sqf";
player_enterCode       = compile preprocessFileLineNumbers "doorManagement\player_enterCode.sqf";
player_changeCombo = compile preprocessFileLineNumbers "doorManagement\player_changeCombo.sqf"; 
/*DoorManagement End*/

 

В этом же файле находим строки 

 

player_unlockDoor   = compile preprocessFileLineNumbers "defaultfile.sqf";   

player_changeCombo = compile preprocessFileLineNumbers "defaultfike.sqf"; 

 

и добавляем перед ними //

Чтобы получилось

 

// player_unlockDoor   = compile preprocessFileLineNumbers "defaultfile.sqf";   

//player_changeCombo = compile preprocessFileLineNumbers "defaultfike.sqf"; 

 

Переходим в variables.sqf

И в верхней части файла (Не в самом верху!) добавляем!

 

/**DoorManagement Config**/
DoorAdminList = ["-2","-3"]; // List of Player Id's of admins that can manage all doors
AllowManualCode = true;// 2 reason| 1: Allows breaking codes (if 2nd config = false and code = 3 digits) | 2: Friends can access access not owned doors until owner gets on.
HarderPenalty = true;// Cen's Penalty: Flashes screen white. And kicks player to lobby if failed more then (random number between 4 and 14) times.
// AllowUncrackableCode = false; // in next release: if set to true, player can change code to more then 4 digits, The manualCode will always fail when he does. THIS is for AntiCodeCrack servers that allow Manual Code for people that like that system.
// in next release. AllowManualCode will allow players to change the code in the DoorManagement Menu.
/**DoorManagement Config END**/
DZE_DoorsLocked = ["Land_DZE_GarageWoodDoorLocked","Land_DZE_LargeWoodDoorLocked","Land_DZE_WoodDoorLocked","CinderWallDoorLocked_DZ","CinderWallDoorSmallLocked_DZ"];

 

 

Идем в fn_selfaction.sqf

 

Под это 

player removeAction s_player_barkdog;
s_player_barkdog = -1;
player removeAction s_player_warndog;
s_player_warndog = -1;
player removeAction s_player_followdog;
s_player_followdog = -1;

Пишем это

 

player removeAction s_player_manageDoor;
s_player_manageDoor = -1; // u might also want to add this to variables reset in your variables.sqf

 

Далее: 

Выше этого 

//Allow owner to unlock vault

Добавляем это

 

//Allow manage door
if((_typeOfCursorTarget in DZE_DoorsLocked)) then {
	if (s_player_manageDoor < 0) then {		 
     s_player_manageDoor = player addAction ["<t color='#0059FF'>Manage Door</t>", "doorManagement\initDoorManagement.sqf", _cursorTarget, 5, false];
	};
} else {
		player removeAction s_player_manageDoor;
		s_player_manageDoor = -1;
};

С миссией окончено, идем в сервер

 

server_monitor

 

Под это

_object = createVehicle [_type, _pos, [], 0, "CAN_COLLIDE"];

 

Вставить это:

 

if (typeOf (_object) in  DZE_DoorsLocked) then {
    _object setVariable ["doorfriends", _inventory, true];
};

 

Найти это (Если вы не используете plotMangement)

 

if (count _inventory> 0) then {

 Заменить на это

 

if ((count _inventory> 0) && !(typeOf( _object) in  DZE_DoorsLocked)) then {

 

Если вы используете plotManagment

 

Найти и заменить это

 

if ((count _inventory> 0) && !(typeOf( _object) == "Plastic_Pole_EP1_DZ")) then {

На это

 

if ((count _inventory> 0) && !(typeOf( _object) == "Plastic_Pole_EP1_DZ") && !(typeOf( _object) in  DZE_DoorsLocked)) then {

 

Теперь server_updateObject

 

изменить это 

 

_inventory = [
getWeaponCargo _object,
getMagazineCargo _object,
getBackpackCargo _object
];

На это (В случае если вы не используете plotManagment)

 

_isNormal = true;
if (typeOf (_object)in DZE_DoorsLocked) then{
_isNormal = false;
_inventory = _object getVariable ["doorfriends", []]; //We're replacing the inventory with UIDs for this item
};
if(_isNormal)then {
_inventory = [
getWeaponCargo _object,
getMagazineCargo _object,
getBackpackCargo _object
];

 

Если вы используете plotManagement

Изменить это 

 

if (typeOf (_object) == "Plastic_Pole_EP1_DZ") then{
    _inventory = _object getVariable ["plotfriends", []]; //We're replacing the inventory with UIDs for this item
} else {
    _inventory = [
    getWeaponCargo _object,
    getMagazineCargo _object,
    getBackpackCargo _object
    ];
}; 

На это

 

_isNormal = true;
if (typeOf (_object) == "Plastic_Pole_EP1_DZ") then{
    _isNormal = false;
    _inventory = _object getVariable ["plotfriends", []]; //We're replacing the inventory with UIDs for this item
}; 
if (typeOf (_object)in DZE_DoorsLocked) then{
    _isNormal = false;
	_inventory = _object getVariable ["doorfriends", []]; //We're replacing the inventory with UIDs for this item
};

if(_isNormal)then {
    _inventory = [
    getWeaponCargo _object,
    getMagazineCargo _object,
    getBackpackCargo _object
    ];
};

 

 

Если вы используете инфистар добавить в исключения

 

711195, 41144
"DoorManagement","Entercode"

 

На этом установка окончена! Всем спасибо за внимание)

Edited by Alexis
была ошибка в коде, исправлено (see edit history)

Share this post


Link to post
Share on other sites







как раз сегодня ставлю данный скрипт, есть вопросик

player removeAction s_player_barkdog;
s_player_barkdog = -1;
player removeAction s_player_warndog;
s_player_warndog = -1;
player removeAction s_player_followdog;
s_player_followdog = -1;

в fn_selfaction.sqf данный код встречается 2 раза, вставлять в обоих случаях? 
В оригинале тоже не понятно

 

Спасибо за гайд, держи +

Share this post


Link to post
Share on other sites

как раз сегодня ставлю данный скрипт, есть вопросик

player removeAction s_player_barkdog;
s_player_barkdog = -1;
player removeAction s_player_warndog;
s_player_warndog = -1;
player removeAction s_player_followdog;
s_player_followdog = -1;

в fn_selfaction.sqf данный код встречается 2 раза, вставлять в обоих случаях? 

В оригинале тоже не понятно

 

Спасибо за гайд, держи +

Я вставлял во вторую, если не будет отображаться меню на колёсике "Manage Door" то добавляй ещё s_player_followdog = -1; в variables.sqf

 

 

Автор ещё забыл добавить в гайд.

 

Что бы сделать привязку к объектам если вы не используете PlotManagement нужно:

1. Сделать кастомный Player_Upgrade.sqf

2. Найти там  player reveal _object;

Ниже вставить:

 

_friendUID = getPlayerUID player;
_friendName = name  player;
_friends = [[_friendUID,_friendName]] ;


_object setVariable ["doorfriends", _friends, true];
PVDZE_veh_Update = [_object,"gear"];
publicVariableServer "PVDZE_veh_Update";
PVDZE_veh_Update call server_updateObject;
 
Edited by bender88 (see edit history)

Share this post


Link to post
Share on other sites

Установил P4L, Plot Manager и Door Manager.
Если установить дверь с замком - то проблем нет, все работает.

Однако если поставить дверь, а потом повесить замок - не выдаются права на дверной менеджер и глазной сканер.

исправлено:

@@bender88, хотя у меня установлен мод P4L.

Однако пункт "Управление дверью" не выходит. Идеи, где возможна ошибка?

Edited by Grom13 (see edit history)

Share this post


Link to post
Share on other sites

Установил P4L, Plot Manager и Door Manager.

Если установить дверь с замком - то проблем нет, все работает.

Однако если поставить дверь, а потом повесить замок - не выдаются права на дверной менеджер и глазной сканер.

исправлено:

@@bender88, хотя у меня установлен мод P4L.

Однако пункт "Управление дверью" не выходит. Идеи, где возможна ошибка?

если стоит инфистар, то он может блокировать скрол меню. допиши плот жизни и дверь в исключение.

 

711195, 41144

"DoorManagement","Entercode"

 

 

 

Share this post


Link to post
Share on other sites

Спасибо, но это есть в гайде и Инфи последний, а там они уже в белом списке.
Причина была в дубликате списка закрытых дверей в variabls. 

если стоит инфистар, то он может блокировать скрол меню. допиши плот жизни и дверь в исключение.
 

Edited by Grom13 (see edit history)

Share this post


Link to post
Share on other sites

Здравствуйте! У меня такая проблема: есть широкие ворота, сделанные с помошью вектора, т.е. 2 ворот повернуты на 90 градусов в разные стороны и стоят рядом. Получается какая-то путаница, если открываешь одну дверь, то на второй тоже появляется "Open" и в то же время "Unlock". Дверь открывается. При попытке ее разлочить отправляет в обморок. С вводом кодов все нормально. У кого-нибудь была такая проблема? Может не очень понятно описал, трудно отследить какую-то последовательность, но кто сталкивался поймет сразу. Заранее спасибо!

Share this post


Link to post
Share on other sites

когда ставлю на сервер с P4l 2.35 без plot manager то перестает сохранятся тнаспорт на своих позициях и делаются откаты БД. В чем дело?

Share this post


Link to post
Share on other sites

 

когда ставлю на сервер с P4l 2.35 без plot manager то перестает сохранятся тнаспорт на своих позициях и делаются откаты БД. В чем дело?

в криворукой настройке.

Share this post


Link to post
Share on other sites

в криворукой настройке.

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

Автору который спросил в чем дело. Посмотри логи RPT(серверный и клиентский). Смотри все ли верно поставил. Если ошибка остается просто повтори процедуру установки(но смотрите внимательно, все делайте по шагам)

Share this post


Link to post
Share on other sites

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

Автору который спросил в чем дело. Посмотри логи RPT(серверный и клиентский). Смотри все ли верно поставил. Если ошибка остается просто повтори процедуру установки(но смотрите внимательно, все делайте по шагам)

пфф, изи катка, с первого раза поставлю

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

Это всё конечно хорошо и похвально, но дело в том что я уже давным-давно перевёл эту статью и на сайте она есть  :dry: 
Перед тем как делать гайд, посмотрите нет ли такой статьи на форуме? Я думаю поиском не трудно пользоваться  :wacko: 
А за старания плюс, однозначно  :smile:

Share this post


Link to post
Share on other sites

Это всё конечно хорошо и похвально, но дело в том что я уже давным-давно перевёл эту статью и на сайте она есть  :dry: 

Перед тем как делать гайд, посмотрите нет ли такой статьи на форуме? Я думаю поиском не трудно пользоваться  :wacko: 

А за старания плюс, однозначно  :smile:

амм, опубликована 10 февраля, так что хз, и я чет не видел твоей темы

Share this post


Link to post
Share on other sites

Поставил себе Плот менеджмент и Дор менеджмент, ставлю замок а когда хочу сделать скан глаза пишет: "НЕ УСПЕШНО" (я так понимаю что оно не запоминает игрока).
В чем может быть проблема? У меня пиратка.

Share this post


Link to post
Share on other sites

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

Share this post


Link to post
Share on other sites

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

Покажи сервер_монитор

Share this post


Link to post
Share on other sites

//Create it

            _object = createVehicle [_type, _pos, [], 0, "CAN_COLLIDE"];
                
                if (typeOf (_object) in  DZE_DoorsLocked) then {
                _object setVariable ["doorfriends", _inventory, true];
                };
                
            _object setVariable ["lastUpdate",time];
            _object setVariable ["ObjectID", _idKey, true];
            _object setVariable ["ownerPUID", _ownerPUID, true];
 
            _lockable = 0;
            if(isNumber (configFile >> "CfgVehicles" >> _type >> "lockable")) then {
                _lockable = getNumber(configFile >> "CfgVehicles" >> _type >> "lockable");
            };
 
 

 

    if ((count _inventory > 0) && !(typeOf( _object) in  DZE_DoorsLocked)) then {
                if( count (_inventory) > 3)then{
                    _object setVariable ["bankMoney", _inventory select 3, true];
                        }else{
                        _object setVariable ["bankMoney", 0, true];
                        };
                if (_type in DZE_LockedStorage) then {
                    // Fill variables with loot
                    _object setVariable ["WeaponCargo", (_inventory select 0),true];
                    _object setVariable ["MagazineCargo", (_inventory select 1),true];
                    _object setVariable ["BackpackCargo", (_inventory select 2),true];
                } else {



private ["_nul","_result","_pos","_wsDone","_dir","_isOK","_countr","_objWpnTypes","_objWpnQty","_dam","_selection","_totalvehicles","_object","_idKey","_type","_ownerID","_worldspace","_inventory","_hitPoints","_fuel","_damage","_key","_vehLimit","_hiveResponse","_objectCount","_codeCount","_data","_status","_val","_traderid","_retrader","_traderData","_id","_lockable","_debugMarkerPosition","_vehicle_0","_bQty","_vQty","_BuildingQueue","_objectQueue","_superkey","_shutdown","_res","_hiveLoaded","_ownerPUID"];
 

 



какие есть предложения?

Edited by TheFirstNoob
Пользуйтесь кодом. (see edit history)

Share this post


Link to post
Share on other sites

//Create it

            _object = createVehicle [_type, _pos, [], 0, "CAN_COLLIDE"];
                
                if (typeOf (_object) in  DZE_DoorsLocked) then {
                _object setVariable ["doorfriends", _inventory, true];
                };
                
            _object setVariable ["lastUpdate",time];
            _object setVariable ["ObjectID", _idKey, true];
            _object setVariable ["ownerPUID", _ownerPUID, true];
 
            _lockable = 0;
            if(isNumber (configFile >> "CfgVehicles" >> _type >> "lockable")) then {
                _lockable = getNumber(configFile >> "CfgVehicles" >> _type >> "lockable");
            };
 
 

 

    if ((count _inventory > 0) && !(typeOf( _object) in  DZE_DoorsLocked)) then {
                if( count (_inventory) > 3)then{
                    _object setVariable ["bankMoney", _inventory select 3, true];
                        }else{
                        _object setVariable ["bankMoney", 0, true];
                        };
                if (_type in DZE_LockedStorage) then {
                    // Fill variables with loot
                    _object setVariable ["WeaponCargo", (_inventory select 0),true];
                    _object setVariable ["MagazineCargo", (_inventory select 1),true];
                    _object setVariable ["BackpackCargo", (_inventory select 2),true];
                } else {



private ["_nul","_result","_pos","_wsDone","_dir","_isOK","_countr","_objWpnTypes","_objWpnQty","_dam","_selection","_totalvehicles","_object","_idKey","_type","_ownerID","_worldspace","_inventory","_hitPoints","_fuel","_damage","_key","_vehLimit","_hiveResponse","_objectCount","_codeCount","_data","_status","_val","_traderid","_retrader","_traderData","_id","_lockable","_debugMarkerPosition","_vehicle_0","_bQty","_vQty","_BuildingQueue","_objectQueue","_superkey","_shutdown","_res","_hiveLoaded","_ownerPUID"];
 

 

 

какие есть предложения?

Предложения - либо выложи весь код сервер_монитор, желательно, или скинь мне его в личку

Edited by Alexis (see edit history)

Share this post


Link to post
Share on other sites

plot for life у меня используют файлы сервера из папки custom в корне игры. вот сам файлик сервер_монитор. из всего что у меня стоит: plot for life, snap pro, build vector, ZSC 3.0, advenced trading 2.1

 

 

private ["_nul","_result","_pos","_wsDone","_dir","_isOK","_countr","_objWpnTypes","_objWpnQty","_dam","_selection","_totalvehicles","_object","_idKey","_type","_ownerID","_worldspace","_inventory","_hitPoints","_fuel","_damage","_key","_vehLimit","_hiveResponse","_objectCount","_codeCount","_data","_status","_val","_traderid","_retrader","_traderData","_id","_lockable","_debugMarkerPosition","_vehicle_0","_bQty","_vQty","_BuildingQueue","_objectQueue","_superkey","_shutdown","_res","_hiveLoaded","_ownerPUID"];


dayz_versionNo =         getText(configFile >> "CfgMods" >> "DayZ" >> "version");
dayz_hiveVersionNo =     getNumber(configFile >> "CfgMods" >> "DayZ" >> "hiveVersion");


_hiveLoaded = false;


waitUntil{initialized}; //means all the functions are now defined


diag_log "HIVE: Starting";


waituntil{isNil "sm_done"}; // prevent server_monitor be called twice (bug during login of the first player)
    
// Custom Configs
if(isnil "MaxVehicleLimit") then {
    MaxVehicleLimit = 50;
};


if(isnil "MaxDynamicDebris") then {
    MaxDynamicDebris = 100;
};
if(isnil "MaxAmmoBoxes") then {
    MaxAmmoBoxes = 3;
};
if(isnil "MaxMineVeins") then {
    MaxMineVeins = 50;
};
// Custon Configs End


if (isServer && isNil "sm_done") then {


    serverVehicleCounter = [];
    _hiveResponse = [];


    for "_i" from 1 to 5 do {
        diag_log "HIVE: trying to get objects";
        _key = format["CHILD:302:%1:", dayZ_instance];
        _hiveResponse = _key call server_hiveReadWrite;  
        if ((((isnil "_hiveResponse") || {(typeName _hiveResponse != "ARRAY")}) || {((typeName (_hiveResponse select 1)) != "SCALAR")})) then {
            if ((_hiveResponse select 1) == "Instance already initialized") then {
                _superkey = profileNamespace getVariable "SUPERKEY";
                _shutdown = format["CHILD:400:%1:", _superkey];
                _res = _shutdown call server_hiveReadWrite;
                diag_log ("HIVE: attempt to kill.. HiveExt response:"+str(_res));
            } else {
                diag_log ("HIVE: connection problem... HiveExt response:"+str(_hiveResponse));
            
            };
            _hiveResponse = ["",0];
        } 
        else {
            diag_log ("HIVE: found "+str(_hiveResponse select 1)+" objects" );
            _i = 99; // break
        };
    };
    
    _BuildingQueue = [];
    _objectQueue = [];
    
    if ((_hiveResponse select 0) == "ObjectStreamStart") then {
    
        // save superkey
        profileNamespace setVariable ["SUPERKEY",(_hiveResponse select 2)];
        
        _hiveLoaded = true;
    
        diag_log ("HIVE: Commence Object Streaming...");
        _key = format["CHILD:302:%1:", dayZ_instance];
        _objectCount = _hiveResponse select 1;
        _bQty = 0;
        _vQty = 0;
        for "_i" from 1 to _objectCount do {
            _hiveResponse = _key call server_hiveReadWriteLarge;
            //diag_log (format["HIVE dbg %1 %2", typeName _hiveResponse, _hiveResponse]);
            if ((_hiveResponse select 2) isKindOf "ModularItems") then {
                _BuildingQueue set [_bQty,_hiveResponse];
                _bQty = _bQty + 1;
            } else {
                _objectQueue set [_vQty,_hiveResponse];
                _vQty = _vQty + 1;
            };
        };
        diag_log ("HIVE: got " + str(_bQty) + " Epoch Objects and " + str(_vQty) + " Vehicles");
    };
    
    // # NOW SPAWN OBJECTS #
    _totalvehicles = 0;
    {
        _idKey =         _x select 1;
        _type =            _x select 2;
        _ownerID =         _x select 3;


        _worldspace =     _x select 4;
        _inventory =    _x select 5;
        _hitPoints =    _x select 6;
        _fuel =            _x select 7;
        _damage =         _x select 8;
        
        _dir = 0;
        _pos = [0,0,0];
        _wsDone = false;
        if (count _worldspace >= 2) then
        {
        
            if ((typeName (_worldspace select 0)) == "STRING") then {
                _worldspace set [0, call compile (_worldspace select 0)];
                _worldspace set [1, call compile (_worldspace select 1)];
            };
        
            _dir = _worldspace select 0;
            if (count (_worldspace select 1) == 3) then {
                _pos = _worldspace select 1;
                _wsDone = true;
            }
        };            
        
        if (!_wsDone) then {
            if (count _worldspace >= 1) then { _dir = _worldspace select 0; };
            _pos = [getMarkerPos "center",0,4000,10,0,2000,0] call BIS_fnc_findSafePos;
            if (count _pos < 3) then { _pos = [_pos select 0,_pos select 1,0]; };
            diag_log ("MOVED OBJ: " + str(_idKey) + " of class " + _type + " to pos: " + str(_pos));
        };
        
        _vector = [[0,0,0],[0,0,0]];
_vecExists = false;
_ownerPUID = "0";   
if (count _worldspace >= 3) then{
    if(count _worldspace == 3) then{
            if(typename (_worldspace select 2) == "STRING")then{
                _ownerPUID = _worldspace select 2;
            }else{
                 if(typename (_worldspace select 2) == "ARRAY")then{
                    _vector = _worldspace select 2;
                    if(count _vector == 2)then{
                        if(((count (_vector select 0)) == 3) && ((count (_vector select 1)) == 3))then{
                            _vecExists = true;
                        };
                    };
                };                  
            };


    }else{
        //Was not 3 elements, so check if 4 or more
        if(count _worldspace == 4) then{
            if(typename (_worldspace select 3) == "STRING")then{
                _ownerPUID = _worldspace select 3;
            }else{
                if(typename (_worldspace select 2) == "STRING")then{
                    _ownerPUID = _worldspace select 2;
                };
            };




            if(typename (_worldspace select 2) == "ARRAY")then{
                _vector = _worldspace select 2;
                if(count _vector == 2)then{
                    if(((count (_vector select 0)) == 3) && ((count (_vector select 1)) == 3))then{
                        _vecExists = true;
                    };
                };
            }else{
                if(typename (_worldspace select 3) == "ARRAY")then{
                    _vector = _worldspace select 3;
                    if(count _vector == 2)then{
                        if(((count (_vector select 0)) == 3) && ((count (_vector select 1)) == 3))then{
                            _vecExists = true;
                        };
                    };
                };
            };


        }else{
            //More than 3 or 4 elements found
            //Might add a search for the vector, ownerPUID will equal 0
        };
    };
}; 
        
        // Realign characterID to OwnerPUID - need to force save though.
        
        if (count _worldspace < 3) then
        {
            _worldspace set [count _worldspace, "0"];
        };        
        _ownerPUID = _worldspace select 2;
        
        // diag_log format["Server_monitor: [ObjectID = %1]  [ClassID = %2] [_ownerPUID = %3]", _idKey, _type, _ownerPUID];
        
        if (_damage < 1) then {
            //diag_log format["OBJ: %1 - %2", _idKey,_type];
            
            //Create it
            _object = createVehicle [_type, _pos, [], 0, "CAN_COLLIDE"];
            if (typeOf (_object) in  DZE_DoorsLocked) then {
                _object setVariable ["doorfriends", _intentory, true];
                };
            _object setVariable ["lastUpdate",time];
            _object setVariable ["ObjectID", _idKey, true];
            _object setVariable ["ownerPUID", _ownerPUID, true];


            _lockable = 0;
            if(isNumber (configFile >> "CfgVehicles" >> _type >> "lockable")) then {
                _lockable = getNumber(configFile >> "CfgVehicles" >> _type >> "lockable");
            };


            // fix for leading zero issues on safe codes after restart
            if (_lockable == 4) then {
                _codeCount = (count (toArray _ownerID));
                if(_codeCount == 3) then {
                    _ownerID = format["0%1", _ownerID];
                };
                if(_codeCount == 2) then {
                    _ownerID = format["00%1", _ownerID];
                };
                if(_codeCount == 1) then {
                    _ownerID = format["000%1", _ownerID];
                };
            };


            if (_lockable == 3) then {
                _codeCount = (count (toArray _ownerID));
                if(_codeCount == 2) then {
                    _ownerID = format["0%1", _ownerID];
                };
                if(_codeCount == 1) then {
                    _ownerID = format["00%1", _ownerID];
                };
            };


            _object setVariable ["CharacterID", _ownerID, true];
            
            clearWeaponCargoGlobal  _object;
            clearMagazineCargoGlobal  _object;
            // _object setVehicleAmmo DZE_vehicleAmmo;
            
            _object setdir _dir;
            if(_vecExists)then{
    _object setVectorDirAndUp _vector;
}; 
            _object setposATL _pos;
            _object setDamage _damage;
            
            if ((typeOf _object) in dayz_allowedObjects) then {
                if (DZE_GodModeBase) then {
                _object setVariable["memDir",_dir,true];
                    _object addEventHandler ["HandleDamage", {false}];
                } else {
                    _object addMPEventHandler ["MPKilled",{_this call object_handleServerKilled;}];
                };
                // Test disabling simulation server side on buildables only.
                _object enableSimulation false;
                // used for inplace upgrades && lock/unlock of safe
                _object setVariable ["OEMPos", _pos, true];
                
            };


            if ((count _inventory > 0) && !(typeOf( _object) in  DZE_DoorsLocked)) then {
                    if( count (_inventory) > 3)then{
                    _object setVariable ["bankMoney", _inventory select 3, true];
                        }else{
                        _object setVariable ["bankMoney", 0, true];
                        };
                if (_type in DZE_LockedStorage) then {
                    // Fill variables with loot
                    _object setVariable ["WeaponCargo", (_inventory select 0),true];
                    _object setVariable ["MagazineCargo", (_inventory select 1),true];
                    _object setVariable ["BackpackCargo", (_inventory select 2),true];
                } else {


                    //Add weapons
                    _objWpnTypes = (_inventory select 0) select 0;
                    _objWpnQty = (_inventory select 0) select 1;
                    _countr = 0;                    
                    {
                        if(_x in (DZE_REPLACE_WEAPONS select 0)) then {
                            _x = (DZE_REPLACE_WEAPONS select 1) select ((DZE_REPLACE_WEAPONS select 0) find _x);
                        };
                        _isOK =     isClass(configFile >> "CfgWeapons" >> _x);
                        if (_isOK) then {
                            _object addWeaponCargoGlobal [_x,(_objWpnQty select _countr)];
                        };
                        _countr = _countr + 1;
                    } count _objWpnTypes; 
                
                    //Add Magazines
                    _objWpnTypes = (_inventory select 1) select 0;
                    _objWpnQty = (_inventory select 1) select 1;
                    _countr = 0;
                    {
                        if (_x == "BoltSteel") then { _x = "WoodenArrow" }; // Convert BoltSteel to WoodenArrow
                        if (_x == "ItemTent") then { _x = "ItemTentOld" };
                        _isOK =     isClass(configFile >> "CfgMagazines" >> _x);
                        if (_isOK) then {
                            _object addMagazineCargoGlobal [_x,(_objWpnQty select _countr)];
                        };
                        _countr = _countr + 1;
                    } count _objWpnTypes;


                    //Add Backpacks
                    _objWpnTypes = (_inventory select 2) select 0;
                    _objWpnQty = (_inventory select 2) select 1;
                    _countr = 0;
                    {
                        _isOK =     isClass(configFile >> "CfgVehicles" >> _x);
                        if (_isOK) then {
                            _object addBackpackCargoGlobal [_x,(_objWpnQty select _countr)];
                        };
                        _countr = _countr + 1;
                    } count _objWpnTypes;
                };
            };    
            
            if (_object isKindOf "AllVehicles") then {
                {
                    _selection = _x select 0;
                    _dam = _x select 1;
                    if (_selection in dayZ_explosiveParts && _dam > 0.8) then {_dam = 0.8};
                    [_object,_selection,_dam] call object_setFixServer;
                } count _hitpoints;


                _object setFuel _fuel;


                if (!((typeOf _object) in dayz_allowedObjects)) then {
                    
                    //_object setvelocity [0,0,1];
                    _object call fnc_veh_ResetEH;        
                    
                    if(_ownerID != "0" && !(_object isKindOf "Bicycle")) then {
                        _object setvehiclelock "locked";
                    };
                    
                    _totalvehicles = _totalvehicles + 1;


                    // total each vehicle
                    serverVehicleCounter set [count serverVehicleCounter,_type];
                };
            };


            //Monitor the object
            PVDZE_serverObjectMonitor set [count PVDZE_serverObjectMonitor,_object];
        };
    } forEach (_BuildingQueue + _objectQueue);
    // # END SPAWN OBJECTS #


    // preload server traders menu data into cache
    if !(DZE_ConfigTrader) then {
        {
            // get tids
            _traderData = call compile format["menu_%1;",_x];
            if(!isNil "_traderData") then {
                {
                    _traderid = _x select 1;


                    _retrader = [];


                    _key = format["CHILD:399:%1:",_traderid];
                    _data = "HiveEXT" callExtension _key;


                    //diag_log "HIVE: Request sent";
            
                    //Process result
                    _result = call compile format ["%1",_data];
                    _status = _result select 0;
            
                    if (_status == "ObjectStreamStart") then {
                        _val = _result select 1;
                        //Stream Objects
                        //diag_log ("HIVE: Commence Menu Streaming...");
                        call compile format["ServerTcache_%1 = [];",_traderid];
                        for "_i" from 1 to _val do {
                            _data = "HiveEXT" callExtension _key;
                            _result = call compile format ["%1",_data];
                            call compile format["ServerTcache_%1 set [count ServerTcache_%1,%2]",_traderid,_result];
                            _retrader set [count _retrader,_result];
                        };
                        //diag_log ("HIVE: Streamed " + str(_val) + " objects");
                    };


                } forEach (_traderData select 0);
            };
        } forEach serverTraders;
    };


    if (_hiveLoaded) then {
        //  spawn_vehicles
        _vehLimit = MaxVehicleLimit - _totalvehicles;
        if(_vehLimit > 0) then {
            diag_log ("HIVE: Spawning # of Vehicles: " + str(_vehLimit));
            for "_x" from 1 to _vehLimit do {
                [] spawn spawn_vehicles;
            };
        } else {
            diag_log "HIVE: Vehicle Spawn limit reached!";
        };
    };
    
    //  spawn_roadblocks
    diag_log ("HIVE: Spawning # of Debris: " + str(MaxDynamicDebris));
    for "_x" from 1 to MaxDynamicDebris do {
        [] spawn spawn_roadblocks;
    };
    //  spawn_ammosupply at server start 1% of roadblocks
    diag_log ("HIVE: Spawning # of Ammo Boxes: " + str(MaxAmmoBoxes));
    for "_x" from 1 to MaxAmmoBoxes do {
        [] spawn spawn_ammosupply;
    };
    // call spawning mining veins
    diag_log ("HIVE: Spawning # of Veins: " + str(MaxMineVeins));
    for "_x" from 1 to MaxMineVeins do {
        [] spawn spawn_mineveins;
    };


    if(isnil "dayz_MapArea") then {
        dayz_MapArea = 10000;
    };
    if(isnil "HeliCrashArea") then {
        HeliCrashArea = dayz_MapArea / 2;
    };
    if(isnil "OldHeliCrash") then {
        OldHeliCrash = false;
    };


    // [_guaranteedLoot, _randomizedLoot, _frequency, _variance, _spawnChance, _spawnMarker, _spawnRadius, _spawnFire, _fadeFire]
    if(OldHeliCrash) then {
        _nul = [3, 4, (50 * 60), (15 * 60), 0.75, 'center', HeliCrashArea, true, false] spawn server_spawnCrashSite;
    };
    if (isDedicated) then {
        // Epoch Events
        _id = [] spawn server_spawnEvents;
        // server cleanup
        [] spawn {
            private ["_id"];
            sleep 200; //Sleep Lootcleanup, don't need directly cleanup on startup + fix some performance issues on serverstart
            waitUntil {!isNil "server_spawnCleanAnimals"};
            _id = [] execFSM "\z\addons\dayz_server\system\server_cleanup.fsm";
        };


        // spawn debug box
        _debugMarkerPosition = getMarkerPos "respawn_west";
        _debugMarkerPosition = [(_debugMarkerPosition select 0),(_debugMarkerPosition select 1),1];
        _vehicle_0 = createVehicle ["DebugBox_DZ", _debugMarkerPosition, [], 0, "CAN_COLLIDE"];
        _vehicle_0 setPos _debugMarkerPosition;
        _vehicle_0 setVariable ["ObjectID","1",true];


        // max number of spawn markers
        if(isnil "spawnMarkerCount") then {
            spawnMarkerCount = 10;
        };
        actualSpawnMarkerCount = 0;
        // count valid spawn marker positions
        for "_i" from 0 to spawnMarkerCount do {
            if (!([(getMarkerPos format["spawn%1", _i]), [0,0,0]] call BIS_fnc_areEqual)) then {
                actualSpawnMarkerCount = actualSpawnMarkerCount + 1;
            } else {
                // exit since we did not find any further markers
                _i = spawnMarkerCount + 99;
            };
            
        };
        diag_log format["Total Number of spawn locations %1", actualSpawnMarkerCount];
        
        endLoadingScreen;
    };


    allowConnection = true;    
    sm_done = true;
    publicVariable "sm_done";
};
 
Edited by Alexis
Изи код (see edit history)

Share this post


Link to post
Share on other sites

Боже на мобильной версии просто страшно уже кодовую смотреть... Каждые 3-4 "слова" уже перенос на новую строчку...

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

 

P.s. Alexis, закинь в код выше кодовую пожалуйста, я длинные сообщения редактить с телефона не айс как могу... Кусками ток.

Share this post


Link to post
Share on other sites

Боже на мобильной версии просто страшно уже кодовую смотреть... Каждые 3-4 "слова" уже перенос на новую строчку...

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

 

P.s. Alexis, закинь в код выше кодовую пожалуйста, я длинные сообщения редактить с телефона не айс как могу... Кусками ток.

Я сам с мобилки....

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 6agu
      Поставил
      Пожалуйста, Войдите или Зарегистрируйтесь, чтобы увидеть это: Вложение.
    • 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.