Перейти к публикации
Поиск в
  • Дополнительно...
Искать результаты, содержащие...
Искать результаты в...
  • Нужна помощь?

    Создайте тему в соответствующем разделе
    Не нужно писать всё в чат!
  • Загляните на торговую площадку

    Там вы можете купить
    всё что касается игровых серверов
  • Не хотите бан?

    Пожалуйста, ознакомьтесь с нашими правилами
    Не нарушайте порядок!
  • Продаёте или покупаете?

    Пользуйтесь услугами гаранта
    Мы сделаем вашу сделку безопасной

Рекомендованные сообщения

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

 

ТОЛЬКО ДЛЯ ПОЛЬЗОВАТЕЛЕЙ 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"

 

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

Изменено пользователем Alexis
была ошибка в коде, исправлено (история изменений)

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах





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

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 раза, вставлять в обоих случаях? 
В оригинале тоже не понятно

 

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

там написано First release ONLY for Plot 4 Life users? нет?

Изменено пользователем HellBoy (история изменений)

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

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

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;
 
Изменено пользователем bender88 (история изменений)

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

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

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

исправлено:

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

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

Изменено пользователем Grom13 (история изменений)

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

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

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

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

исправлено:

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

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

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

 

711195, 41144

"DoorManagement","Entercode"

 

 

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

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

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

Изменено пользователем Grom13 (история изменений)

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

 

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

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

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

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

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

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

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

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

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

ты не он. каждый делает как может. Если рука набита зачем кидать понты? Или хочешь показать себя на фоне обычных пользователей. Если оффтоп сорян(просто нелюблю людей которые ставят себя выше остальных, если у них появляется средство управления)

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

ты не он. каждый делает как может. Если рука набита зачем кидать понты? Или хочешь показать себя на фоне обычных пользователей. Если оффтоп сорян(просто нелюблю людей которые ставят себя выше остальных, если у них появляется средство управления)

А я и не ставлю себя выше остальных, ну если только чуть чуть)))

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

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

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

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

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

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

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

//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"];
 

 



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

Изменено пользователем TheFirstNoob
Пользуйтесь кодом. (история изменений)

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

//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"];
 

 

 

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

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

Изменено пользователем Alexis (история изменений)

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

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";
};
 
Изменено пользователем Alexis
Изи код (история изменений)

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

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

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

 

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

а как это в код?

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

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

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

 

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

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Создайте аккаунт или войдите в него для комментирования

Вы должны быть пользователем, чтобы оставить комментарий

Создать аккаунт

Зарегистрируйтесь для получения аккаунта. Это просто!

Зарегистрировать аккаунт

Войти

Уже зарегистрированы? Войдите здесь.

Войти сейчас

  • Похожие публикации

    • Автор: BR0wi
      Подскажите где найти людей, которые делаю моды на заказ. К кому вообще обращаться? Или что бы реализовать свои идеи нужно самому "год" сидеть и изучать все механики модинга?
    • Автор: CubeIn
      Приветствую господа, хочу создать новый проект, уникальный, но для этого нужен маппер.
      Я оставлю здесь свой дискрод, напишите в лс, кто готов взяться за крупный проект.
      4me#4542
    • Автор: 6agu
      Поставил
      Пожалуйста, Войдите или Зарегистрируйтесь, чтобы увидеть это: Вложение.
    • Автор: 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, с его помощью можно творить поистину интересные локации!
    • Автор: Venom21
      Появилась такая проблема, нужно закрыть некоторые слоты под одежду, когда на определённый слот одет предмет…
      пример: возьмём экзоскелет от Фидова, там есть две версии которая одеваеться как на тело и ноги, и есть которая одеваться на разгрузку и пояс, так вот, нужно например чтобы при одетом экзаче на тело и ноги слоты под пояс и разгрузку блокировались, либо только под определенные предметы, если есть интерес то цену можем в личке обсудить…
      P.S. Разрешение от Фидова на переделку и переупаковку есть)
  • Наш выбор

×
×
  • Создать...

Важная информация

Используя этот сайт, вы автоматически обязуетесь соблюдать наши Правила и Политика конфиденциальности.
Чтобы сделать этот веб-сайт лучше, мы разместили cookies на вашем устройстве. Вы можете изменить свои настройки cookies, в противном случае мы будем считать, что вы согласны с этим.