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


Фотография

Вопросы по скриптингу

Arma3 как плотформа для созда Скритпы

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

#321 OFFLINE   vlad333000

vlad333000

    Полковник

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

Отправлено 21 April 2016 - 14:16

Ave_Ursus, мне в голову приходит пока только два оптимизированных способа:
Первый вариант (Быстрый, удобный, но требует доступ к аддонам сервера) - добавить обработчики событий "hit", "killed" и "init" в конфиг к каждому объекту - через hit и killed (Можно ещё "handleDamage") обрабатываем повреждения и заносим их в какую-нибудь БД, через "init" выполняем поиск объекта в БД и применение найденных данных
Второй вариант (Медленный (Но быстрее тупого поиска по всем объектам), требует доп. интернет трафика, не требует аддонов) - на, все, что может стрелять, вешаем обработчик событий "fired" - в обрабатывающем скрипте сначала смотрим за локальностью, а потом пока существует "выстреленный" объект (Пуля, снаряд, С4...) смотрим и запоминаем его позицию. После исчезновения снаряда отсылаем на сервер его последнюю позицию, а на сервере в маленьком радиусе ищем нужные нам объекты и чекаем их - сохраняем повреждения и позицию объекта (Нужна для быстрого поиска на старте) - на старте по известным координатам ищем объект и наносим ему дамаг
  • 1

#322 OFFLINE   Ave_Ursus

Ave_Ursus

    Мл.сержант

  • Пользователи
  • 125 сообщений
  • Откуда:spb
  • Отряд:ex AS

Отправлено 21 April 2016 - 14:32

Ave_Ursus, мне в голову приходит пока только два оптимизированных способа:
Первый вариант (Быстрый, удобный, но требует доступ к аддонам сервера) - добавить обработчики событий "hit", "killed" и "init" в конфиг к каждому объекту - через hit и killed (Можно ещё "handleDamage") обрабатываем повреждения и заносим их в какую-нибудь БД, через "init" выполняем поиск объекта в БД и применение найденных данных
Второй вариант (Медленный (Но быстрее тупого поиска по всем объектам), требует доп. интернет трафика, не требует аддонов) - на, все, что может стрелять, вешаем обработчик событий "fired" - в обрабатывающем скрипте сначала смотрим за локальностью, а потом пока существует "выстреленный" объект (Пуля, снаряд, С4...) смотрим и запоминаем его позицию. После исчезновения снаряда отсылаем на сервер его последнюю позицию, а на сервере в маленьком радиусе ищем нужные нам объекты и чекаем их - сохраняем повреждения и позицию объекта (Нужна для быстрого поиска на старте) - на старте по известным координатам ищем объект и наносим ему дамаг

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


  • 0

#323 OFFLINE   Sa-Matra

Sa-Matra

    Ефрейтор

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

Отправлено 21 April 2016 - 15:40

Проблема тут может быть в том что объекты ландшафта локальные каждому клиенту и вешать события придется на каждом клиенте. Для карт типа Альтис это станет серьезной проблемой ведь придется подгрузить всю карту через nearestObjects на каждом клиенте, это зависон при загрузке секунд на 10-20, в зависимости от мощности ПК.
  • 0

#324 OFFLINE   Ilias

Ilias

    Прапорщик

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

Отправлено 18 May 2016 - 20:49

Есть 2 array, нужно получить id всех элементов 1-ог не присутствующих во втором (элементы могут повторяться(должно поддерживаться тоже))


  • 0

#325 OFFLINE   vlad333000

vlad333000

    Полковник

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

Отправлено 18 May 2016 - 21:18

Ilias
_array1 = [1, 2, 3, 4, 5];
_array2 = [1, 3, 5];
_array3 = [];
_array4 = [];

{
	if !(_x in _array2) then
	{
		_array3 pushBack _x;		//Элементы
		_array4 pushBack _forEachIndex;	//Иднексы
	};
} forEach _array1;

Сообщение отредактировал vlad333000: 18 May 2016 - 21:20

  • 0

#326 OFFLINE   Ilias

Ilias

    Прапорщик

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

Отправлено 18 May 2016 - 23:28

Ilias

_array1 = [1, 2, 3, 4, 5];
_array2 = [1, 3, 5];
_array3 = [];
_array4 = [];

{
	if !(_x in _array2) then
ц	{
		_array3 pushBack _x;		//Элементы
		_array4 pushBack _forEachIndex;	//Иднексы
	};
} forEach _array1;

если:

     _array1=[0,0,2,1];

     _array2=[0,2,1];

- не сработает


  • 0

#327 OFFLINE   vlad333000

vlad333000

    Полковник

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

Отправлено 19 May 2016 - 02:50

Ilias, и это как же интересно оно не сработает?! на выходе в таком случае будет пустой массив - нет ни одного элемента удовлетворяющему вашему условию - все верно
  • 0

#328 OFFLINE   Schatten

Schatten

    Капитан

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

Отправлено 19 May 2016 - 10:44

Есть 2 array, нужно получить id всех элементов 1-ог не присутствующих во втором (элементы могут повторяться(должно поддерживаться тоже))

_array1 = [1, 2, 3, 4, 5];
_array2 = [1, 3, 5, 6];

_array3 = _array1 arrayIntersect _array2; // [1, 3, 5]

_indexes = [];

{if (!(_x in _array3)) then {_indexes pushBack _forEachIndex}} forEach _array1;

hint (str _indexes); // [1, 3]

  • 0

#329 OFFLINE   Ilias

Ilias

    Прапорщик

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

Отправлено 19 May 2016 - 20:21

Ilias, и это как же интересно оно не сработает?! на выходе в таком случае будет пустой массив - нет ни одного элемента удовлетворяющему вашему условию - все верно

 

 

Есть 2 array, нужно получить id всех элементов 1-ог не присутствующих во втором (элементы могут повторяться(должно поддерживаться тоже))

_array1 = [1, 2, 3, 4, 5];
_array2 = [1, 3, 5, 6];

_array3 = _array1 arrayIntersect _array2; // [1, 3, 5]

_indexes = [];

{if (!(_x in _array3)) then {_indexes pushBack _forEachIndex}} forEach _array1;

hint (str _indexes); // [1, 3]
_a1=[0,0,1,2,3];
_a2=[0,1,2];

_is=[];

{if !(_x in _a2)then{_is=_is+[_forEachIndex]}}forEach _a1;

hint str _is; //4,  нужно 1,4  (в этом и проблема(в повторяющихся элементах))

можно эргономичнее чем

~
_a1=[0,0,1,2,3];
_a2=[0,1,2];

_a=[];
_la=_a1-_a2;
{
     _n=count _a1-(reverse _a1 find _x);
     _a=_a+[_n];
     _a1 set[_n,""];
}foreach _la;

hint str _a;

?


Сообщение отредактировал Ilias: 19 May 2016 - 21:09

  • 0

#330 OFFLINE   Ilias

Ilias

    Прапорщик

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

Отправлено 20 May 2016 - 10:19

{if(typename _x=="string")then{_a set[_n-(reverse _a find _x)+1,0]}}foreach(_a-magazines _o);

"set#[ error type number not number expected number"

описание ошибки ++ , помогите пожалуйста


  • 0

#331 OFFLINE   vlad333000

vlad333000

    Полковник

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

Отправлено 20 May 2016 - 11:58

Ilias, во-первых, вы так и не ответили на мой вопрос выше
Во-вторых, ожидалось число >> оператор reverse не возвращает никакого значения >> find ломается >> ломается все выражение >> результат не число, а нечто не описываемое

Сообщение отредактировал vlad333000: 20 May 2016 - 12:02

  • 0

#332 OFFLINE   Ilias

Ilias

    Прапорщик

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

Отправлено 20 May 2016 - 22:58

Ilias, во-первых, вы так и не ответили на мой вопрос выше
Во-вторых, ожидалось число >> оператор reverse не возвращает никакого значения >> find ломается >> ломается все выражение >> результат не число, а нечто не описываемое

_la=_a;
reverse _la;
_n=count _a-1;
{if(typename _x=="string")then{_a set[_n-(_la find _x)+1,0]}}foreach(_a-magazines _o);

thanks

 

если в array1 повторяется элемент присутствующий в array2 1 раз он сочтётся присутствующим (не должен)


  • 0

#333 OFFLINE   vlad333000

vlad333000

    Полковник

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

Отправлено 21 May 2016 - 00:15

Ilias, ну я вас обрадую: вы либо не мой код скопировали, либо внесли правки, в которых не разбираетесь от слова совсем и так же еще не поняли то, что я написал
Все работает

Сообщение отредактировал vlad333000: 21 May 2016 - 00:17

  • 0

#334 OFFLINE   Ilias

Ilias

    Прапорщик

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

Отправлено 21 May 2016 - 01:21

Ilias, ну я вас обрадую: вы либо не мой код скопировали, либо внесли правки, в которых не разбираетесь от слова совсем и так же еще не поняли то, что я написал

Все работает

а нужно чтобы отобразился 0 потому что их в array1 два


  • 0

#335 OFFLINE   vlad333000

vlad333000

    Полковник

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

Отправлено 21 May 2016 - 09:05

Ilias, ну так так и пишите! Или мне нужно стать экстрасенсом и в этих словах:


нужно получить id всех элементов 1-ог не присутствующих во втором (элементы могут повторяться

Увидеть фразу: "Элементы массива 2 могут только один раз соответствовать элементам массива 1" или что-то похожее на неё?
Учитесь ставить задачи правильнее и более подробно описывать требования!
_array1 = [1, 1, 2, 3, 4, 5];
_array2 = [1, 3, 5];
_array3 = [];
_array4 = [];
_array2Temp = + _array2; //Копируем массив 2 что бы не изменять исходный

{
   if !(_x in _array2Temp) then
   {	
      _array3 pushBack _x;                        //Элементы
      _array4 pushBack _forEachIndex;             //Иднексы
   } else {
      _array2Temp deleteAt (_array2Temp find _x); //Удаляем элемент из временного массива
   };
} forEach _array1;

Сообщение отредактировал vlad333000: 21 May 2016 - 10:59

  • 0

#336 OFFLINE   Ilias

Ilias

    Прапорщик

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

Отправлено 21 May 2016 - 20:13

Ilias, ну так так и пишите! Или мне нужно стать экстрасенсом и в этих словах:

 

нужно получить id всех элементов 1-ог не присутствующих во втором (элементы могут повторяться

Увидеть фразу: "Элементы массива 2 могут только один раз соответствовать элементам массива 1" или что-то похожее на неё?
Учитесь ставить задачи правильнее и более подробно описывать требования!
_array1 = [1, 1, 2, 3, 4, 5];
_array2 = [1, 3, 5];
_array3 = [];
_array4 = [];
_array2Temp = + _array2; //Копируем массив 2 что бы не изменять исходный

{
   if !(_x in _array2Temp) then
   {	
      _array3 pushBack _x;                        //Элементы
      _array4 pushBack _forEachIndex;             //Иднексы
   } else {
      _array2Temp deleteAt (_array2Temp find _x); //Удаляем элемент из временного массива
   };
} forEach _array1;

yep, prety same to my variant


Сообщение отредактировал Ilias: 22 May 2016 - 01:44

  • 0

#337 OFFLINE   Ave_Ursus

Ave_Ursus

    Мл.сержант

  • Пользователи
  • 125 сообщений
  • Откуда:spb
  • Отряд:ex AS

Отправлено 31 May 2016 - 20:39

Дяденьки, что то я не могу найти... А как скриптом запустить человеку респаун?


  • 0

#338 OFFLINE   vlad333000

vlad333000

    Полковник

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

Отправлено 31 May 2016 - 20:48

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

+

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


  • 0

#339 OFFLINE   SteelRat

SteelRat

    Полковник

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

Отправлено 01 June 2016 - 16:14

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

+

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

player setDamage 1;

:)


  • 0

#340 OFFLINE   vlad333000

vlad333000

    Полковник

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

Отправлено 01 June 2016 - 17:07

SteelRat, а если спавн стоит на спектаторе :)
  • 0




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