Перейти к содержимому


Фотография

Господа помогите решить


Лучший Ответ petrovv , 22 August 2021 - 04:10

Работает ,  спасибо вам что потратили на меня время (хотя вы этого не должны) Если вам было сложно со мной то простите меня за это!

Перейти к сообщению


  • Авторизуйтесь для ответа в теме
Сообщений в теме: 10

#1 OFFLINE   petrovv

petrovv

    Рядовой

  • Пользователи
  • 5 сообщений
  • Откуда:Санкт-Петербург
  • Отряд:Team

Отправлено 20 August 2021 - 21:27

есть скрипт safezone он работает следующим образом : люди находясь в нем не могут открывать огонь по игрокам взырвать технику и тп. Но выйдя из зоны игрок может открыть огонь по людям , технике находящимся в safezone и по ним будет проходить урон. Нужен примерно скрипт как на king of the hill №2 люди техника стоящая в safezone была бессмертной. Помогите пожалуйста!

 

Вот сам скрипт:

define SAFEZONES [["base_1", 100],["base_2", 100],["base_3", 100]]

// ERROR CHECK
waitUntil {!isNull player};

// CREATE pEH
switch (playerSide) do
{
	case west:
	{
		player addEventHandler ["Fired",{if ({(_this select 0) distance getMarkerPos (_x select 0) < _x select 1} count SAFEZONES > 0) then {deleteVehicle (_this select 6);};}];
		if({(_this select 0) distance getMarkerPos (_x select 0) < _x select 1} count SAFEZONES > 0) then {
			player allowDamage false;
			if(vehicle player != player) then {
				vehicle player allowDamage false;
				player allowDamage false;
			};
		};
	};
	case opfor:
	{
		player addEventHandler ["Fired",{if ({(_this select 0) distance getMarkerPos (_x select 0) < _x select 1} count SAFEZONES > 0) then {deleteVehicle (_this select 6);};}];
		if({(_this select 0) distance getMarkerPos (_x select 0) < _x select 1} count SAFEZONES > 0) then {
			player allowDamage false;
			if(vehicle player != player) then {
				vehicle player allowDamage false;
				player allowDamage false;
			};
		};
	};
	case independent:
	{
		player addEventHandler ["Fired",{if ({(_this select 0) distance getMarkerPos (_x select 0) < _x select 1} count SAFEZONES > 0) then {deleteVehicle (_this select 6);};}];
		if({(_this select 0) distance getMarkerPos (_x select 0) < _x select 1} count SAFEZONES > 0) then {
			player allowDamage false;
			if(vehicle player != player) then {
				vehicle player allowDamage false;
				player allowDamage false;
			};
		};
	};
};

Сообщение отредактировал petrovv: 21 August 2021 - 04:11

  • 0

#2 OFFLINE   Schatten

Schatten

    Ст. лейтенант

  • Пользователи
  • 1545 сообщений
  • Откуда:Минск, Беларусь

Отправлено 21 August 2021 - 22:09

petrovv, вот этот код попробуй:

#define SAFEZONES ["base_1", "base_2", "base_3"]

#define HANDLE_DAMAGE_EVENT_HANDLER_INDEX_VAR_NAME "HandleDamageEventHandlerIndex"
#define TRIGGER_ACTIVATION_LIST_PREV_VAR_NAME "ListPrev"

if (!isServer) exitWith { };

private ["_trigger", "_triggerStatements"];

_triggerStatements = [
    { thisList isNotEqualTo (thisTrigger getVariable [TRIGGER_ACTIVATION_LIST_PREV_VAR_NAME, []]) },
    {
        _listPrev = thisTrigger getVariable [TRIGGER_ACTIVATION_LIST_PREV_VAR_NAME, []];

        {
            _index = _x addEventHandler ["HandleDamage", {
                params ["", "", "_damage", "_source"];

                if ((SAFEZONES findIf { _source inArea _x }) >= 0) then { 0 } else { _damage };
            }];

            _x setVariable [HANDLE_DAMAGE_EVENT_HANDLER_INDEX_VAR_NAME, _index];
        } forEach (thisList - _listPrev);

        {
            _index = _x getVariable [HANDLE_DAMAGE_EVENT_HANDLER_INDEX_VAR_NAME, -1];

            if (_index >= 0) then {
                _x removeEventHandler ["HandleDamage", _index];
            };
        } forEach (_listPrev - thisList);

        thisTrigger setVariable [TRIGGER_ACTIVATION_LIST_PREV_VAR_NAME, +thisList];
    },
    { }
];
_triggerStatements = _triggerStatements apply { _str = str _x; _str select [1, (count _str) - 2] };

{
    _trigger = createTrigger ["EmptyDetector", getMarkerPos _x, false];

    _trigger setTriggerActivation ["ANY", "PRESENT", true];
    _trigger setTriggerArea (_x call BIS_fnc_getArea);
    _trigger setTriggerStatements _triggerStatements;
} forEach SAFEZONES;

Сообщение отредактировал Schatten: 22 August 2021 - 03:51

  • 0

#3 OFFLINE   IsayN

IsayN

    Рядовой

  • Пользователи
  • 2 сообщений
  • Откуда:Moscow
  • Отряд:Team

Отправлено 22 August 2021 - 02:53

попробуй это


Сообщение отредактировал IsayN: 22 August 2021 - 02:54

  • 0

#4 OFFLINE   petrovv

petrovv

    Рядовой

  • Пользователи
  • 5 сообщений
  • Откуда:Санкт-Петербург
  • Отряд:Team

Отправлено 22 August 2021 - 02:56

Создал файл sqf закинул туда этот скрипт , вызвал его с помощью тригера но он не рабоает , может я что то делаю не так?


  • 0

#5 OFFLINE   Schatten

Schatten

    Ст. лейтенант

  • Пользователи
  • 1545 сообщений
  • Откуда:Минск, Беларусь

Отправлено 22 August 2021 - 03:15

petrovv, запускать нужно один раз и на сервере, например, из initServer.sqf.


  • 0

#6 OFFLINE   petrovv

petrovv

    Рядовой

  • Пользователи
  • 5 сообщений
  • Откуда:Санкт-Петербург
  • Отряд:Team

Отправлено 22 August 2021 - 03:24

запустил через initServer  тоже самое , урон в safezone не проходит , но выйдя из нее игрок может нанести урон игрокам в safezone


  • 0

#7 OFFLINE   Schatten

Schatten

    Ст. лейтенант

  • Пользователи
  • 1545 сообщений
  • Откуда:Минск, Беларусь

Отправлено 22 August 2021 - 03:30

урон в safezone не проходит , но выйдя из нее игрок может нанести урон игрокам в safezone

Круто, по-моему это соответствует тому, что написано в первом сообщении:

 

люди находясь в нем не могут открывать огонь по игрокам взырвать технику и тп. Но выйдя из зоны игрок может открыть огонь по людям , технике находящимся в safezone и по ним будет проходить урон


  • 0

#8 OFFLINE   petrovv

petrovv

    Рядовой

  • Пользователи
  • 5 сообщений
  • Откуда:Санкт-Петербург
  • Отряд:Team

Отправлено 22 August 2021 - 03:33

возможно вы меня не правильно поняли , я хочу сделать так чтоб игроки не находящиеся в safezone не могли наносить урон игрокам технике находящемся в safe zone


Сообщение отредактировал petrovv: 22 August 2021 - 03:37

  • 0

#9 OFFLINE   Schatten

Schatten

    Ст. лейтенант

  • Пользователи
  • 1545 сообщений
  • Откуда:Минск, Беларусь

Отправлено 22 August 2021 - 03:52

petrovv, тогда код немного упростится:

#define SAFEZONES ["base_1", "base_2", "base_3"]

#define HANDLE_DAMAGE_EVENT_HANDLER_INDEX_VAR_NAME "HandleDamageEventHandlerIndex"
#define TRIGGER_ACTIVATION_LIST_PREV_VAR_NAME "ListPrev"

if (!isServer) exitWith { };

private ["_trigger", "_triggerStatements"];

_triggerStatements = [
    { thisList isNotEqualTo (thisTrigger getVariable [TRIGGER_ACTIVATION_LIST_PREV_VAR_NAME, []]) },
    {
        _listPrev = thisTrigger getVariable [TRIGGER_ACTIVATION_LIST_PREV_VAR_NAME, []];

        {
            _index = _x addEventHandler ["HandleDamage", { 0 }];

            _x setVariable [HANDLE_DAMAGE_EVENT_HANDLER_INDEX_VAR_NAME, _index];
        } forEach (thisList - _listPrev);

        {
            _index = _x getVariable [HANDLE_DAMAGE_EVENT_HANDLER_INDEX_VAR_NAME, -1];

            if (_index >= 0) then {
                _x removeEventHandler ["HandleDamage", _index];
            };
        } forEach (_listPrev - thisList);

        thisTrigger setVariable [TRIGGER_ACTIVATION_LIST_PREV_VAR_NAME, +thisList];
    },
    { }
];
_triggerStatements = _triggerStatements apply { _str = str _x; _str select [1, (count _str) - 2] };

{
    _trigger = createTrigger ["EmptyDetector", getMarkerPos _x, false];

    _trigger setTriggerActivation ["ANY", "PRESENT", true];
    _trigger setTriggerArea (_x call BIS_fnc_getArea);
    _trigger setTriggerStatements _triggerStatements;
} forEach SAFEZONES; 

  • 0

#10 OFFLINE   petrovv

petrovv

    Рядовой

  • Пользователи
  • 5 сообщений
  • Откуда:Санкт-Петербург
  • Отряд:Team

Отправлено 22 August 2021 - 04:10   Лучший Ответ

Работает ,  спасибо вам что потратили на меня время (хотя вы этого не должны) Если вам было сложно со мной то простите меня за это!


Сообщение отредактировал petrovv: 22 August 2021 - 04:11

  • 0

#11 OFFLINE   Schatten

Schatten

    Ст. лейтенант

  • Пользователи
  • 1545 сообщений
  • Откуда:Минск, Беларусь

Отправлено 27 August 2021 - 01:07

Улучшенная версия с устранёнными недоработками:


Из-за особенностей команды 

Пожалуйста Войдите или Зарегистрируйтесь чтобы увидеть скрытое содержание

 при изменении локальности объектов неуязвимость будет теряться.


Сообщение отредактировал Schatten: 27 August 2021 - 01:10

  • 0




Яндекс.Метрика