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 Troy1
      Всем привет. Подскжите ну или помогите пожалуйста решить вопрос.
      Вопрос звучит так. На сервере есть трейдер зоны и базы игроков. 
      Если в течение определённого времени, на пример 1 - 2 часа с машиной не кто не взаимодействует и машина не находится в зоне трейдера или на теретории базы, то машина отлетает в гараж или на штраф стоянку.
      На сервере используется TraderPlus.
       
      Есть такие решения у кого?
      За ранние благодарю.
    • By Troy1
      Всем привет. Подскжите ну или помогите пожалуйста решить вопрос.
      Вопрос звучит так. Нужно сделать так, что бы на всей карте был запрет на строительство. 
      Если нужно построить например базу с палатками, то нужно установить верстак или флаг, который установит зону для строительства с радиусом примерно 20-25 метров от центра и желательно что бы зона была квадратной.
      Есть такие решения у кого?
      За ранние благодарю.
    • By BR0wi
      Подскажите где найти людей, которые делаю моды на заказ. К кому вообще обращаться? Или что бы реализовать свои идеи нужно самому "год" сидеть и изучать все механики модинга?
    • By CubeIn
      Приветствую господа, хочу создать новый проект, уникальный, но для этого нужен маппер.
      Я оставлю здесь свой дискрод, напишите в лс, кто готов взяться за крупный проект.
      4me#4542
    • By 6agu
      Поставил
      Пожалуйста, Войдите или Зарегистрируйтесь, чтобы увидеть это: Вложение.
  • 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.