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

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

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

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

    Там вы можете продать или купить
    Всё что касается игровых серверов
  • 0
pekar0201

Восстановление разрушенных построек через plotManagement

Вопрос

При обслуживании (Maintain) построек не только чинятся повреждённые постройки, а и полностью восстанавливаются разрушенные. В том числе и разрушенный плот.
Как сделать так что-бы разрушенные постройки не восстанавливались сией функцией?

Эксперементировал с - if (damage > 0.9) then {
Но ничего не получилось. Может я конечно где-то не там его пихал.

P.S. Если объяснил не особо доходчиво, то - Как сделать так что-бы постройки нельзя было починить при определённом уровне урона!?

Вот сам файл "обслуживания (Maintain)" построек:
 

Скрытый текст

private ["_newWealth","_missing","_missingQty","_proceed","_itemIn","_countIn","_target","_objectClasses","_range","_objects","_requirements","_count","_cost","_option"];
disableSerialization;

if (DZE_ActionInProgress) exitWith { cutText [(localize "STR_EPOCH_ACTIONS_2") , "PLAIN DOWN"]; };
DZE_ActionInProgress = true;

player removeAction s_player_maintain_area;
s_player_maintain_area = 1;
player removeAction s_player_maintain_area_preview;
s_player_maintain_area_preview = 1;

_target = cursorTarget;

_objectClasses = DZE_maintainClasses;
_range = DZE_PlotPole select 0;
_objects = nearestObjects [_target, _objectClasses, _range];

_objects_filtered = [];
{
    if (damage _x >= DZE_DamageBeforeMaint) then {
        _objects_filtered set [count _objects_filtered, _x];
   };
} count _objects;
_objects = _objects_filtered;

_count = count _objects;

if (_count == 0) exitWith {
            _ctrl = ((uiNamespace getVariable "PlotManagement") displayCtrl 7012);
            _result =  format["Objects to maintain: %1" , _count];
            _ctrl ctrlSetText   _result;
        
            _ctrl = ((uiNamespace getVariable "PlotManagement") displayCtrl 7013);
            _result =  format["Price to maintain: %1 %2" , 0, CurrencyName];
            
            _ctrl ctrlSetText   _result;    
    DZE_ActionInProgress = false;
    s_player_maintain_area = -1;
    s_player_maintain_area_preview = -1;
};

_theCost = _count * 150;
_requirements = [[CurrencyName,_theCost]];


_option = _this select 0;
switch _option do {
    case "maintain": {
        
        _wealth = player getVariable["cashMoney",0];
        _missing = "";
        _missingQty = 0;
        _proceed = true;
        {
            _itemIn = _x select 0;
            _countIn = _x select 1;
            if (_wealth < _countIn) exitWith { _missing = _itemIn; _missingQty = (_countIn - _wealth); _proceed = false; };
        } count _requirements;

        if (_proceed) then {
            _newWealth = (_wealth - _countIn);
            player playActionNow "Medic";
            [player,_range,true,(getPosATL player)] spawn player_alertZombies;

            player setVariable["cashMoney",_newWealth,true];

            PVDZE_plr_Save = [player,(magazines player),true,true];
            publicVariableServer "PVDZE_plr_Save";
            
            PVDZE_maintainArea = [player,1,_target];
            publicVariableServer "PVDZE_maintainArea";
            
            
            cutText [format[(localize "STR_EPOCH_ACTIONS_4"), _count], "PLAIN DOWN", 5];            
            
            _ctrl = ((uiNamespace getVariable "PlotManagement") displayCtrl 7012);
            _result =  format["SUCCESS : Objects maintained: %1" , _count];
            _ctrl ctrlSetText   _result;
        
            _ctrl = ((uiNamespace getVariable "PlotManagement") displayCtrl 7013);
            _result =  format["SUCCESS : Price maintained: %1 %2" , _theCost, CurrencyName];
            _ctrl ctrlSetText   _result;    
                
        } else {
            _ctrl = ((uiNamespace getVariable "PlotManagement") displayCtrl 7012);
            _result =  format["FAILED: Objects to maintain: %1" , _count];
            _ctrl ctrlSetText   _result;
        
            _ctrl = ((uiNamespace getVariable "PlotManagement") displayCtrl 7013);
            _result =  format["FAILED: Price to maintain: %1 %2" , _theCost, CurrencyName];
            _ctrl ctrlSetText   _result;    
            
            cutText [format[(localize "STR_EPOCH_ACTIONS_6"), _missingQty, CurrencyName], "PLAIN DOWN"];
        };
    };
    case "preview": {
        _cost = "";
        {
            _itemIn = _x select 0;
            _countIn = _x select 1;
            if (_cost != "") then {
                _cost = _cost + " and ";
            };
            _cost = _cost + (str(_countIn) + " " + CurrencyName);
        } count _requirements;
            
        cutText [format[(localize "STR_EPOCH_ACTIONS_7"), _count, _cost], "PLAIN DOWN"];
            
        _ctrl = ((uiNamespace getVariable "PlotManagement") displayCtrl 7012);
        _result =  format["Objects to maintain: %1" , _count];
        _ctrl ctrlSetText   _result;
        
        _ctrl = ((uiNamespace getVariable "PlotManagement") displayCtrl 7013);
        _result =  format["Price to maintain: %1 %2" , _theCost, CurrencyName];
        _ctrl ctrlSetText   _result;                                
    };
};

DZE_ActionInProgress = false;
s_player_maintain_area = -1;
s_player_maintain_area_preview = -1;


За помощь\адекватные ответы ставлю + !

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

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


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

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

  • 0

Ты для начала выведи в РПТ, что у тебя в _objectClasses, ибо разрушенные постройки - совсем другие классы, и имеют префикс - wreck и т.п., так что ничего у тебя восстанавливаться не должно.

А заодно выведи, что после поиска находит, после -

_objects = nearestObjects [_target, _objectClasses, _range];

что в _objects

 

ну и можешь раз такое дело еще и цикл добавить по _objects в котором глянуть - а чему равен "damage _x", у данных объектов.

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


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


  • 0

NoNameUltima DZE_maintainClasses - Это ведь вписано в _objectClasses
А как вывести это всё дело в RPT мне неизвестно...


P.S. Он разрушенные постройки (Т.е. Wreck) восстанавливает, но они не сохраняются после рестарта, т.е. после рестарта разрушенные исчезнут.

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


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

Присоединяйтесь к обсуждению

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

Гость
Ответить на вопрос...

×   Вставлено в виде отформатированного текста.   Восстановить форматирование

  Разрешено не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отобразить как ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставить изображения напрямую. Загрузите или вставьте изображения по ссылке.

Загрузка...

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

    • Автор: Miduznya
      Всем привет, чет не нашел не где как можно в ручную обновить через .bat или .cmd файл
      если есть у кого такой поделитесь плиз. Прошу сильно не пинать если есть такая тема дайте ссылку
    • Автор: BorizzK
      Чет упустил сей момент
      Ща в разьездах и пытаюсь заранее понять
      что за это отвечает из констант и скриптов
      Такт сам разберусь, но хотелось бы сделать это быстрей, потому вдруг кто знает где и что копать
       
      PS игроки пишут, что кровь восстанавливается не более чем на половину... Или она и не должна и надо применять переливание,  физраствор итп?
    • Автор: RedLink
      Всем привет.
      Один из разработчиков мода Epoch (Salival's scripts) поделился скриптом для админ-панели Инфистара, чтобы вручную спавнить миссии WAI, DZMS, а также ивенты.
       
      Открываем файл админ-панели Инфистара AT.sqf и ищем код (примерно 289-я строка):
      adminadd = adminadd + [" Force Disconnect (Self)",{(findDisplay 46) closeDisplay 0;},"0","0","0","0",[]]; }; и после нее вставляем:
       
      Где [EVENT] - это ивенты которые хранятся у меня в папке "modules", а "building_supplies" - это наименование файла (пробелов быть не должно).
      Где [HERO]/[BANDIT] - это мисии для Героев/Бандитов. Так же в строке идет наименование папки "hero"/"bandit", и соответственно наименование файла миссии, например "abandoned_trader", которые соответствуют наименованию файла миссии в папке с героем или бандитом.
      Тоже самое и для миссий DZMS - "major"/"minor" - это имя папки миссий, а "SMxxx" - это имя файла миссии.
       
      Далее открываем сам Инфистар - AH.sqf и ищем следующие строки:
      } forEach _arrayforcrate; }; и под ними вставляем:
      if(_option == 8000) then { _mtype = _array select 2; _mname = _array select 3; if (_mtype == "hero" || {_mtype == "bandit"}) then { diag_log format ["%1 (%2) Spawning mission [%3] %4",name (_array select 1),getPlayerUID (_array select 1),_mtype,_mname]; wai_mission_markers set [(count wai_mission_markers), format ["Main%1%2",_mtype,count(wai_mission_data)]]; if (isNil "ai_show_count") then {wai_mission_data = wai_mission_data + [[0,"",[],[0,0,0]]];} else {wai_mission_data = wai_mission_data + [[0,[],[],[],[]]]}; execVM format ["\z\addons\dayz_server\WAI\missions\%1\%2.sqf",_mtype,_mname]; _sl = format['%1 (%2) spawned WAI\missions\%3\%4.sqf',_clientName,_clientUID,_mtype,_mname]; PVAH_WriteLogReq = [_playerObj,toArray _sl]; publicVariableServer 'PVAH_WriteLogReq'; }; if (_mtype == "event") then { [] execVM "\z\addons\dayz_server\modules\" + _mname + ".sqf"; _sl = format['%1 (%2) spawned Event - %3.sqf',_clientName,_clientUID,_mname]; PVAH_WriteLogReq = [_playerObj,toArray _sl]; publicVariableServer 'PVAH_WriteLogReq'; }; if (_mtype == "major" || {_mtype == "minor"}) then { diag_log format ["%1 (%2) Spawning mission [%3] %4",name (_array select 1),getPlayerUID (_array select 1),_mtype,_mname]; execVM format ["\z\addons\dayz_server\DZMS\missions\%1\%2.sqf",_mtype,_mname]; _sl = format['%1 (%2) spawned DZMS\missions\%3\%4.sqf',_clientName,_clientUID,_mtype,_mname]; PVAH_WriteLogReq = [_playerObj,toArray _sl]; publicVariableServer 'PVAH_WriteLogReq'; }; }; Отдельно добавлю, что все миссии, которые спавнит админ, записываются в лог файл и панель Инфистара.
       

      Пожалуйста, Войдите или Зарегистрируйтесь, чтобы увидеть это: Вложение.
    • Автор: SPIRT
      Поделюсь еще одним рецептом )))))
      Имеем сервер Арма3 который запускаем для себя любимого и для друга, системник, кабель интернета и роутер или модем кому как нравится, так в чем проблема спросите, а вот в чем, если кабель инета подключен напрямую в системник то сервер виден в сетевой игре, а вот если подключаем интернет через модем то наш сервер пропадает из видимости. Бросаемся открывать порты, смотреть что не так, кароч глаза на лоб. Я тоже через все это прошел. Решилась проблема незатейливо включением на роутере функции DMZ или функции демилитаризованная зона. Расскажу на примере собственного роутера  ASUS. Собственно к делу :  Открываем в брузере настройки роутера, далее в левом меню нам нужна вкладка "Локальная сеть" 
      Пожалуйста, Войдите или Зарегистрируйтесь, чтобы увидеть это: Вложение.

      в открывшемся меню жмем на вкладку "DHCP сервер" в низу видим ----- "Список присвоенных вручную IP-адресов в обход DHCP (Максимум : 64)" ------ там еть пустое поле 
      MAC-адрес со стрелочкой, жмем на стрелку вылезает имя нашего компьтера и ip адрес  --- жмем "добавить"  на "+" с правой стороны ,в итоге получаем мак адрес нашей сетевой карты и присвоенный ip, жмем применить. 
      Идем далее ---  в левом меню выбираю вкладку интернет , в верхнем баре появляются разделы ..... ...... ..... "DMZ" Пожалуйста, Войдите или Зарегистрируйтесь, чтобы увидеть это: Вложение.
      жмем на нее  вылезает вкладка на ней 2 поля "Включить DMZ" и "IP-адрес выделенной станции", в первом жмем включить, во втором клацаем в пустое поле появляется IP адрес, или вбиваем в ручную тот который выпал рядом с мак адресом сетевой карты  ---- жмем применить . Обязательно перезагружаем модем.
       Далее запускаем свой сервак Арма и радуемся.
      Кому помогло + в репу.
×
×
  • Создать...