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


Фотография

скрипт не реагирует на созданный маркер.


Лучший Ответ Targon , 02 December 2015 - 19:38

добрый день. помогла publicvariable

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


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

#1 OFFLINE   Targon

Targon

    Ефрейтор

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

Отправлено 27 November 2015 - 08:27

доброго времени суток всем. у меня скрипт аномалий и я пытаюсь сделать рандомный спавн маркера аномалий.

 

инициализация:

*/
//diag_log "Server side initializing...";
tf_Anomalies = [];
tf_ActiveAnomalies = [];
private ["_cnt, _Atext, _mark"];

_cnt = count allMapMarkers - 1;
for "_x" from 0 to _cnt do
{
	_Atext = markerText (allMapMarkers select _x);
	if (_Atext in ["jarka","electra","teleport","gravy"]) then
	{
		_mark = allMapMarkers select _x;
		tf_Anomalies append [_mark];
	};
};

publicVariable "tf_Anomalies";


_null = [] spawn {
	private ["_Aname, _Aactive, _Aplayers"];
	while {true} do
	{

	  sleep 1;
	  {
			_Aname = _x;
	    _Aactive = VAR getVariable [_Aname,false];
	    diag_log str tf_ActiveAnomalies;
	    diag_log format["Anomaly %1 is %2",_Aname, str _Aactive];
			if (_Aactive) then
      {
   	    diag_log format["Checking anomaly %1",_Aname];
      
				_Aplayers = false;
				scopeName "ifAnomalyisactive";
				{
	   	    diag_log format["Checking Player %1",_x];
				  
					if (markerPos _Aname distance (_x) < 7) then
					{
		   	    diag_log format["Player %1 in range of anomaly %2",_x,_Aname];
					  if (alive _x) then
					  {
			   	    diag_log format["Player %1 is alive",_x];
						  _Aplayers = true;
						  breakout "ifAnomalyisactive";
						};
					};
			 	} forEach allPlayers;
				if (!_Aplayers) then
				{
				  VAR setVariable [_Aname, false, true];
					[[_Aname],"anomaly_fnc_Ahide",true,false] call BIS_fnc_MP;
			    diag_log str tf_ActiveAnomalies;
					diag_log format["Hide it: %1",_Aname];
					tf_ActiveAnomalies = tf_ActiveAnomalies - [_Aname];
			    diag_log str tf_ActiveAnomalies;
			  };
			};
		} forEach tf_ActiveAnomalies;
	};
};

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

if (alive Player) then
{

	_APlayer = Player;
	switch (markerText _Aname) do
	{
		case "jarka":
		{ 
	   	if (Player == _APlayer) then
	   	{
				if (_APlayer != vehicle _APlayer) then 
				{ 	
					(vehicle _APlayer) setDamage (damage vehicle _APlayer + random(0.3));
					_APlayer setVariable ["AGM_AllowUnconscious", true];				
					_APlayer setVariable ["AGM_Blood", ((_APlayer getVariable "AGM_Blood") - random(0.1)), True];
					_APlayer setVariable ["AGM_isBleeding", false, True];
					_APlayer setVariable ["AGM_Pain", ((_APlayer getVariable "AGM_Pain") + random(0.4)), True];
					_APlayer setHitPointDamage ["HitBody", (_APlayer getHitPointDamage "HitBody")+random(0.3)];
					_APlayer setHitPointDamage ["HitLeftLeg", (_APlayer getHitPointDamage "HitLeftLeg")+random(0.1)];
					_APlayer setHitPointDamage ["HitRightLeg", (_APlayer getHitPointDamage "HitRightLeg")+random(0.1)];
					"dynamicBlur" ppEffectAdjust [8];

Проблема состоит в том, что созданный маркер в 2D редакторе с параметром Text "teleport", text "gravy" и.т.д работает с данный скриптом. созданный через скрипт например не реагирует

 

вот пример спавна маркера 

private ["_pos","_centerPos","_anomal","_markArray"];

_markArray = ["jarka","electra","teleport","gravy"];
_anomal = _markArray select floor random count _markArray;

_pos = [getMarkerPos "center",5,10,10,0,25,0] call BIS_fnc_findSafePos;

randomMarkerCoord = _pos;
randomMarkerName = _anomal;
randomMarkerName = createMarker [_anomal, randomMarkerCoord];
randomMarkerName setMarkerColor "ColorRed";
randomMarkerName setMarkerType "mil_objective";
randomMarkerName setMarkerText format ["%1", _anomal];
sleep 4; 

прошу помочь в данном вопросе. может кто сталкивался с аналогичной проблемой.


Сообщение отредактировал Targon: 27 November 2015 - 08:32

  • 0

#2 OFFLINE   vlad333000

vlad333000

    Полковник

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

Отправлено 27 November 2015 - 09:58

Targon, насколько я помню имя маркера при создании через скрипт немного другое (Там вроде ещё добавляется ид владельца маркера), и в общем лучше не имена маркера запоминать, а сам маркер
  • 0

#3 OFFLINE   Targon

Targon

    Ефрейтор

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

Отправлено 27 November 2015 - 10:55

Targon, насколько я помню имя маркера при создании через скрипт немного другое (Там вроде ещё добавляется ид владельца маркера), и в общем лучше не имена маркера запоминать, а сам маркер

то есть распознавать по типу маркера или по другому какому нибудь параметру?


  • 0

#4 ONLINE   Schatten

Schatten

    Капитан

  • Пользователи
  • 1793 сообщений
  • Откуда:Тбилиси, Грузия

Отправлено 27 November 2015 - 11:34

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


  • 0

#5 OFFLINE   vlad333000

vlad333000

    Полковник

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

Отправлено 27 November 2015 - 11:56

Targon, создайте массив из маркеров! Вам createMarker нахрена возвращает маркер?
Schatten, нет имя маркера ни как не связано с его текстом - это две разные вещи
  • 0

#6 OFFLINE   Sa-Matra

Sa-Matra

    Ефрейтор

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

Отправлено 27 November 2015 - 18:30

Ваш скрипт инициализации собирает все маркеры при старте игры и потом работает с ними. Чтобы созданный на ходу маркер делал так же надо его добавить в tf_Anomalies и судя по всему отправить по сети через publicVariable

Targon, создайте массив из маркеров! Вам createMarker нахрена возвращает маркер?

createMarker возвращает лишь строку названия маркера. Типа значения "маркер" в игре нет, все маркеры хранятся по уникальным названиям, создать два с одинаковым невозможно, по сути то что возвращает createMarker и не нужно, разве что для проверки на создание уже имеющегося маркера, ибо в таком случае команда вернет пустую строку, а не то же самое что вы в нее отправили.

Сообщение отредактировал Sa-Matra: 27 November 2015 - 18:37

  • 0

#7 OFFLINE   SteelRat

SteelRat

    Полковник

  • Пользователи
  • 3241 сообщений
  • Откуда:РФ

Отправлено 27 November 2015 - 22:40

Настоятельно не рекомендую давать своим переменным имена системных переменных!

_x

одна из них.


  • 0

#8 OFFLINE   Sa-Matra

Sa-Matra

    Ефрейтор

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

Отправлено 27 November 2015 - 22:56

-Удалено-

Сообщение отредактировал Sa-Matra: 27 November 2015 - 22:57

  • 0

#9 OFFLINE   SteelRat

SteelRat

    Полковник

  • Пользователи
  • 3241 сообщений
  • Откуда:РФ

Отправлено 27 November 2015 - 23:23

ЗЫ

Этому

				_Aplayers = false;
				scopeName "ifAnomalyisactive";
				{
					diag_log format["Checking Player %1",_x];
				  
					if (markerPos _Aname distance (_x) < 7) then
					{
						diag_log format["Player %1 in range of anomaly %2",_x,_Aname];
						if (alive _x) then
						{
							diag_log format["Player %1 is alive",_x];
							_Aplayers = true;
							breakout "ifAnomalyisactive";
						};
					};
			 	} forEach allPlayers;

есть более короткая альтернатива

{
	diag_log format["Checking Player %1",_x];

	if (markerPos _Aname distance (_x) < 7) then
	{
		diag_log format["Player %1 in range of anomaly %2",_x,_Aname];
		if (alive _x) exitWith
		{
			diag_log format["Player %1 is alive",_x];
			_Aplayers = true;
		};
	};
} forEach allPlayers;

  • 0

#10 OFFLINE   Targon

Targon

    Ефрейтор

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

Отправлено 02 December 2015 - 19:38   Лучший Ответ

добрый день. помогла publicvariable


  • 0




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