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


Фотография

Создание триггера на сервере.


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

#1 OFFLINE   Targon

Targon

    Ефрейтор

  • Пользователи
  • 36 сообщений

Отправлено 07 May 2017 - 16:59

Доброго времени суток. Создаю данным скриптом триггер на сервере. Проблема заключается в том, что триггер создается на выделенном сервере и не работают спец эффекты у клиента. Если создать триггер через редактор и поместить его на сервер, то все работает нормально. Как решить данную проблему?

 

Инициализация скрипта:

if (isServer) then {_bul = [] execVM "addons\zenworld\server\spawnmincer.sqf"; 
};

Сам скрипт:

if (isNil("spawnanomaly")) then { spawnanomaly = true; };

while {spawnanomaly} do {
	_num = round(random 50);
	MarkerH = "gn" + str(_num);
	_blum = round(random 2);
	namemarks = ["azona1","azona2","azona3","azona4","azona5","azona6","azona7","azona8","azona9","azona10","azona11","azona12","azona13","azona14","azona15","azona16","azona17","azona18","azona19","azona20","azona21","azona22","azona23","azona24","azona25","azona26","azona27","azona28","azona29","azona30","azona31","azona32","azona33","azona34","azona35","azona36","azona37","azona38","azona39","azona40","azona41","azona42","azona43","azona44","azona45","azona46","azona47","azona48","azona49","azona50","azona51","azona52","azona53","azona54","azona55","azona56","azona57","azona58","azona59","azona60","azona61","azona62","azona63","azona64","azona65","azona66","azona67","azona68","azona69","azona70","azona71","azona72","azona73","azona74","azona75","azona76","azona77","azona78","azona79","azona80"];
	namemark = namemarks call BIS_fnc_selectRandom;
	_mPos = getMarkerPos namemark;
	_pos = [_mPos,10,400,0,0,20,0]call BIS_fnc_findSafePos; 
	createMarker [MarkerH,_pos];  
	MarkerH setMarkerType "mil_objective"; 
	MarkerH setMarkerText "Mincer";  
	MarkerH setMarkerColor "ColorRed";
	_trg = createTrigger ["EmptyDetector", _pos];
	_trg setTriggerArea [30, 30, 10, false];
	_trg setTriggerActivation ["ANY", "PRESENT", true];
	_trg setTriggerStatements ["this", "null=[thistrigger,7] spawn anomaly_fnc_Mincer;", ""];			
	sleep 1;
};	

  • 0

#2 OFFLINE   vlad333000

vlad333000

    Полковник

  • Пользователи
  • 3224 сообщений
  • Откуда:Кострома

Отправлено 08 May 2017 - 00:11

Если создать триггер через редактор и поместить его на сервер, то все работает нормально

Запустить через редактор тестирование в МП, я правильно понял?
Да и неплохо бы увидеть сам скрипт "спец эффекты у клиента"

Сообщение отредактировал vlad333000: 08 May 2017 - 00:14

  • 0

#3 OFFLINE   Targon

Targon

    Ефрейтор

  • Пользователи
  • 36 сообщений

Отправлено 08 May 2017 - 07:21

_epicenter = _this select 0;
_range = _this select 1;
_chance = _this select 2;
_vfxstate=0;
_dstate=0;

_artefacts = ["DAP_STONEBLOOD","DAP_MEAT","DAP_SOUL"];

if (isNil("_chance")) then {_chance=0.15;};

_null = [_epicenter,_range,_artefacts,_chance,player] spawn {
	_epicenter = _this select 0;
	_range = _this select 1;
	_artefacts = _this select 2;
	_chance = _this select 3;
	_x = _this select 4;
	while {true} do {					
		if (!(_x isKindOf "SmokeShellGreen")) then {[_epicenter,_range,_artefacts,_chance] execVM "addons\Scripts\ArtefactSpawn.sqf";};
			sleep 300;
		};
};

_victims=[];

while {true} do 
{
	if (!isDedicated) then 
	{
		_objects=list _epicenter;
		
		{if ((!(alive _x)) or (_x isKindOf "DAP_ARTEFACT") or (_x isKindOf "Air")) then {_objects=_objects-[_x];};}ForEach _objects;

		if (count _objects>0) then 
		{
			{
				_meters = _x distance _epicenter;
				if (_meters < 5) then {
					_mincer1 = "#particlesource" createVehicleLocal getPos _epicenter;
					_mincer2 = "#particlesource" createVehicleLocal getPos _epicenter;
					_mincer3 = "#particlesource" createVehicleLocal getPos _epicenter;
					_mincer1 setParticleCircle [3, [0, 2, 1]];
					_mincer1 setParticleRandom [0, [0.25, 0.25, 0], [0.175, 0.175, 0], 0, 0.25, [0, 0, 0, 0.1], 0, 0];
					_mincer1 setParticleParams [["\A3\data_f\ParticleEffects\Universal\smoke.p3d", 1, 0, 1], "", "Billboard", 0.05, 1, [0, 0, 0], [0, 0, 0], 0, 16, 2, 0, [0.005, 2, 4], [[0.1, 0.1, 0.1, 1], [0.25, 0.25, 0.25, 0.5], [0.5, 0.5, 0.5, 0]], [0], 1, 0, "", "", ""];
					_mincer1 setDropInterval 0.01;
					_mincer2 setParticleCircle [2, [1, 2, 0]];
					_mincer2 setParticleRandom [0, [0.25, 0.25, 0], [0.175, 0.175, 0], 0, 0.25, [0, 0, 0, 0.1], 0, 0];
					_mincer2 setParticleParams [["\A3\data_f\Cl_fire", 16, 0, 16], "", "Billboard", 1, 1, [0, 0, 0], [0, 0, 0], 0, 10, 7.9, 0, [0.5, 2, 4], [[0.1, 0.1, 0.1, 1], [0.25, 0.25, 0.25, 0.5], [0.5, 0.5, 0.5, 0]], [0.08], 1, 0, "", "", ""];
					_mincer2 setDropInterval 0.01;
					_mincer3 setParticleCircle [1, [0, 0, 0]];
					_mincer3 setParticleRandom [0, [0.25, 0.25, 0], [0.175, 0.175, 0], 0, 0.25, [0, 0, 0, 0.1], 0, 0];
					_mincer3 setParticleParams [["\A3\data_f\cl_rock1", 1, 0, 1], "", "SpaceObject", 1, 5, [0, 0, 0], [0, 0, 0.25], 0, 10, 7.9, 0, [10, 2, 4], [[0.1, 0.1, 0.1, 1], [0.25, 0.25, 0.25, 0.5], [0.5, 0.5, 0.5, 0]], [0.08], 1, 0, "", "", ""];
					_mincer3 setDropInterval 0.1;
					if (_epicenter distance (Player) < 200) then {
						_gravisound = [_epicenter] spawn {
							_anomaly = _this select 0;
							[_Anomaly, Player] say3D "gravi_rumble";
						};
					};
				
					_meters = _x distance _epicenter;
					if (_meters < 3) then {
						if ((!(_x in _victims))) then 			
						{
							_victims = _victims + [_x];
							
							null = [_x,_epicenter] spawn
							{
								_victim = _this select 0;
								_anomaly = _this select 1;
								
								_anomaly say "mincer_wind";
			
							};
							
							null = [_x,_epicenter] spawn
							{
								_body = _this select 0;
								_anomaly =  _this select 1;
								
								[_anomaly,_body] execVM "addons\Scripts\Tornado.sqf";

							};
							
						};
					};
					
					if (_meters > 5) then {
						sleep 1;
						deleteVehicle _mincer1;
						deleteVehicle _mincer2;
						deleteVehicle _mincer3;
					} else 
					{
						sleep 1;
						deleteVehicle _mincer1;
						deleteVehicle _mincer2;
						deleteVehicle _mincer3;
					};	
				};
		
			}ForEach _objects;
		};
	};
_pos = (_epicenter modelToWorld [0,0,0]);
_manpos = (player modelToWorld [0,0,0]);
_dist=(player distance [_pos select 0, _pos select 1, _manpos select 2]);

if (_dist<=(_range+25) and ("ItemGPS" in assignedItems player) and (_dstate==0)) then 
	{
	_epicenter setVariable ["DAP_DETECTOR_STATE",1]; 
	[_epicenter,_range,0] execVM "addons\Scripts\Detector.sqf";
	_dstate=1;
	};
	
if (_dist>(_range+25) and ("ItemGPS" in assignedItems player) and (_dstate==1)) then 
	{
	_epicenter setVariable ["DAP_DETECTOR_STATE",0];
	_dstate=0;
	};		
};

Если триггер создавать через редактор, то он работает корректно, но если создавать через скрипт, то скрипт работает, но не работают функции которые должны быть только у клиента if (!isDedicated) then {}; Например в данном скрипте есть: _mincer1 = "#particlesource" createVehicleLocal getPos _epicenter; - через редактор работает, если триггер создан сервером, то нет.


  • 0

#4 OFFLINE   Targon

Targon

    Ефрейтор

  • Пользователи
  • 36 сообщений

Отправлено 08 May 2017 - 07:35

//add trigger on server (hosted or dedicated)
if (isServer) then {
    tr = createTrigger ["EmptyDetector", _somePos];
    publicVariable "tr";
};
//setup trigger on every client 
if (!isDedicated) then {
    waitUntil {!isNil "tr"};
    tr triggerAttachVehicle [player];
    tr setTriggerStatements [
        "this",
        "hint str player",
        "hint str allMissionObjects 'EmptyDetector'"
    ];
};

увидел вот такой код, но у меня что-то смутные сомнения что это сработает


  • 0

#5 OFFLINE   vlad333000

vlad333000

    Полковник

  • Пользователи
  • 3224 сообщений
  • Откуда:Кострома

Отправлено 08 May 2017 - 11:45

Targon, этот скрипт вызывается из того триггера или отдельно через инит? В нем есть команды имеющие локальный эффект и значит их нужно удаленно вызывать, либо сразу запускать на самом клиенте
И еще раз повторю свой вопрос: ситуацию "поставлен в редакторе" вы как тестировали?

Сообщение отредактировал vlad333000: 08 May 2017 - 11:52

  • 0

#6 OFFLINE   Targon

Targon

    Ефрейтор

  • Пользователи
  • 36 сообщений

Отправлено 08 May 2017 - 16:00

Targon, этот скрипт вызывается из того триггера или отдельно через инит? В нем есть команды имеющие локальный эффект и значит их нужно удаленно вызывать, либо сразу запускать на самом клиенте
И еще раз повторю свой вопрос: ситуацию "поставлен в редакторе" вы как тестировали?

1. Данный скрипт вызывается через триггер. 

2. В скрипте, который вызывается через триггер есть команды имеющие локальный эффект.

3. Тестировал следующим образом: создал триггер через редактор который вызывает данный скрип: Итог: все работает нормально. Но если триггер создать через скрипт, который вызывается через init.sqf, то команды имеющие локальный эффект не работают.

4. Задача моя состоит в том, чтобы у триггера после каждой перезагрузки была новая рандомная позиция, и при этом у него работали команды имеющие локальный эффект. (которые выполняются только на клиенте).


  • 0

#7 OFFLINE   vlad333000

vlad333000

    Полковник

  • Пользователи
  • 3224 сообщений
  • Откуда:Кострома

Отправлено 08 May 2017 - 19:14

Targon, в скрипте команды с локлаьным эффектом + триггер создается только на сервере + вы клиент = клиенты не видят эффекта этого скрипта, т. к. он выполняется только на сервере (Сами же написали причины этого). Вам нужно вызывать нужный скрипт на каждом клиенте, что бы его эффект был ивден всем
  • 0




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