[BE] Oubi 718 Жалоба Опубликовано 4 октября, 2018 Вообщем есть у меня скрипт спавнящий хлам в определенном радиусе (вызывается через initServer.sqf), во время спавна, рандомный хлам так же еще и "поджигается" с помощью партиклей. Проблема состоит в том что спавн хлама работает верно, а партикли не отображаются вовсе. Так же пробовал альтернативный метод (забыл какой) где в итоге я получил правильно заспавненный мусор и несинхронизированный между игроками "поджог" мусора. Как мне синхронизировать транспорт (уже работает) и партикли? Если вариантов 0, то могу разделить скрипт на две части (отдельно спавн ВСЕГО мусора, а потом уже рандомный поджог мусора). Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
[BE] Oubi 718 Жалоба Опубликовано 4 октября, 2018 Внезапно надумал возможное решение, остались только вопросы по его оптимальности. Вообщем вместо рандомного спавна огня, рандомно спавню объект "N" (поскольку объекты уже синхронизированы). А уже потом при подключении игрока - для него локально будет создаваться огонь в местах где стоит объект "N". Таким образом клиентская часть скрипта будет работать как и положено, но появится еще несколько "мусорных" объектов (но это еще не точно) которые будут хавать ресурсы(9 Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
DAP 1 539 Жалоба Опубликовано 5 октября, 2018 @Oubi смотри сюда. Пример: if (isserver) then {[object1,object2,...objectN] remoteexeccall ["my_burning_function",-2,true];}; Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
[BE] Oubi 718 Жалоба Опубликовано 5 октября, 2018 @DAP я пересмотрел скрип и скорей всего нашел причину ошибки. Я создавал партикли с помощью createVehicleLocal (SP only), в MP не работает), а теперь создаю через createVehicle (работоспособность еще не проверял). Как думаешь? Поможет? Код ниже. Спойлер _rndNum = floor random 100; // РЕАЛИЗАЦИЯ РАНДОМА if (_rndNum < _per3) then { _location = _x getRelPos [floor random 3,floor random _dir]; _sel = selectRandom _randomWreaks; // РАНДОМНЫЙ "МУСОР" ДЛЯ РАЗМЕЩЕНИЯ _obj = [_sel, [_location select 0, _location select 1,abs (getTerrainHeightASL _location)], random 360] call BIS_fnc_createSimpleObject; //СОЗДАНИЕ С ПОМОЩЬЮ БИСОВСКОЙ ФУНКЦИИ, ХЗ КАК ОНА РАБОТАЕТ _obj setVectorUp surfaceNormal position _obj; //test down _rndNum = floor random 100; if (_rndNum<10) then { // АНАЛОГИЧНАЯ РЕАЛИЗАЦИЯ И ДЛЯ ПАРТИКЛЕЙ _target = _obj; _PS1 = "#particlesource" createVehicle getpos _target; // ИСПРАВЛЕНИЕ _PS1 setParticleCircle [1, [0, 0, 0]]; _PS1 setParticleRandom [0, [0.25, 0.25, 0], [0.2, 0.2, 0], 0, 0.25, [0, 0, 0, 0.1], 0, 0]; _PS1 setParticleParams [["\A3\data_f\ParticleEffects\Universal\smoke.p3d", 1, 0, 1], "", "Billboard", 1, 10, [0, 0, 0], [0, 0, 2.5], 0.25, 10, 7.9, 0.266, [1, 4, 6, 8, 12], [[0.02, 0.02, 0.02, 0.7], [0.03, 0.03, 0.03, 0.6], [0.05, 0.05, 0.05, 0.2], [0.08, 0.08, 0.08, 0.1], [0.1, 0.1, 0.1, 0.01]], [0.125, 0.2, 0.3], 1, 0.5, "", "", _target];; _PS1 setDropInterval 0.02; _PS2 = "#particlesource" createVehicle getpos _target; _PS2 setParticleCircle [0.5, [1, 0, 1]]; _PS2 setParticleRandom [0, [0.25, 0.25, 0], [0.175, 0.175, 0], 0, 0.25, [0, 0, 0, 0.1], 0, 0]; _PS2 setParticleParams [["\A3\data_f\cl_exp", 1, 0, 1], "", "Billboard", 1, 1, [0, 0, 0], [0, 0, 0.45], 1, 8, 10.9, 0.575, [2, 2.3, 2.2, 2, 1.5, 1, 0.1], [[0.1, 0.1, 0.1, 1], [0.25, 0.25, 0.25, 0.5], [0.5, 0.5, 0.5, 0]], [0.018], 1, 0.2, "", "", _target]; _PS2 setDropInterval 0.02; }; Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
[FRWL] Lex 431 Жалоба Опубликовано 5 октября, 2018 @Oubi Вот миссия, для которой я делал партиклы. В папке functions все функции, отвечающие за создание огня и дыма в MP. Результат. 2 crabe и Oubi отреагировали на это Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
DAP 1 539 Жалоба Опубликовано 5 октября, 2018 @Oubi изверг. Во-первых - createvehicle создает объект глобально. То есть он создается на всех машинах. Ты создаешь этот объект на старте миссии через init.sqf. То есть при старте миссии каждый клиент будет у себя создавать объект глобально. То есть количество объектов на миссии будет умножаться на количество клиентов, запустивших миссию, потому что каждый подключившийся клиент будет создавать глобальный объект "#particlesource". Тебе надо поступать совершенно по-другому. На сервере запускается скрипт, который создает глобальные объекты и записывает их в массив. Затем этот массив ты раздаешь на клиенты, которые используя этот массив будут у себя локально спавнить партикли по координатам этих объектов (потому что партикли ВСЕГДА локальны клиенту, на которых они заспавнены и по сети не передаются). Самый простой вариант - создать отдельно функцию, которая будет спавнить объекты и функцию, которая будет спавнить партикли по массиву, переданному в эту функцию. Создание функций подробно описано здесь. Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
[BE] Oubi 718 Жалоба Опубликовано 6 октября, 2018 @Lex Посмотрел еще вчера. Насколько я помню, то в той миске заранее известна позиция для партиклей. А у меня позиции появляются случайным образом и их генерирует сервер. Я пытался сделать массив координат, который потом передавал бы каждому кто подключится, но мои познания синтаксиса А3 оказались не настолько хороши) Я даже с массивами подружится не смог (правда потратил на это около часа всего). Так же пробовал используя классы, но что-то пошло не так. Вообще походу накрылись огни на мисске. Если кто-то страдает избытком времени или же просто желает помочь, то мисска находится ниже, был бы благодарен. ForWOG_v0_1.lythium.rar Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты