[BE] Oubi 718 Report post Posted October 4, 2018 Вообщем есть у меня скрипт спавнящий хлам в определенном радиусе (вызывается через initServer.sqf), во время спавна, рандомный хлам так же еще и "поджигается" с помощью партиклей. Проблема состоит в том что спавн хлама работает верно, а партикли не отображаются вовсе. Так же пробовал альтернативный метод (забыл какой) где в итоге я получил правильно заспавненный мусор и несинхронизированный между игроками "поджог" мусора. Как мне синхронизировать транспорт (уже работает) и партикли? Если вариантов 0, то могу разделить скрипт на две части (отдельно спавн ВСЕГО мусора, а потом уже рандомный поджог мусора). Share this post Link to post Share on other sites
[BE] Oubi 718 Report post Posted October 4, 2018 Внезапно надумал возможное решение, остались только вопросы по его оптимальности. Вообщем вместо рандомного спавна огня, рандомно спавню объект "N" (поскольку объекты уже синхронизированы). А уже потом при подключении игрока - для него локально будет создаваться огонь в местах где стоит объект "N". Таким образом клиентская часть скрипта будет работать как и положено, но появится еще несколько "мусорных" объектов (но это еще не точно) которые будут хавать ресурсы(9 Share this post Link to post Share on other sites
DAP 1,539 Report post Posted October 5, 2018 @Oubi смотри сюда. Пример: if (isserver) then {[object1,object2,...objectN] remoteexeccall ["my_burning_function",-2,true];}; Share this post Link to post Share on other sites
[BE] Oubi 718 Report post Posted October 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; }; Share this post Link to post Share on other sites
[FRWL] Lex 431 Report post Posted October 5, 2018 @Oubi Вот миссия, для которой я делал партиклы. В папке functions все функции, отвечающие за создание огня и дыма в MP. Результат. 2 Oubi and crabe reacted to this Share this post Link to post Share on other sites
DAP 1,539 Report post Posted October 5, 2018 @Oubi изверг. Во-первых - createvehicle создает объект глобально. То есть он создается на всех машинах. Ты создаешь этот объект на старте миссии через init.sqf. То есть при старте миссии каждый клиент будет у себя создавать объект глобально. То есть количество объектов на миссии будет умножаться на количество клиентов, запустивших миссию, потому что каждый подключившийся клиент будет создавать глобальный объект "#particlesource". Тебе надо поступать совершенно по-другому. На сервере запускается скрипт, который создает глобальные объекты и записывает их в массив. Затем этот массив ты раздаешь на клиенты, которые используя этот массив будут у себя локально спавнить партикли по координатам этих объектов (потому что партикли ВСЕГДА локальны клиенту, на которых они заспавнены и по сети не передаются). Самый простой вариант - создать отдельно функцию, которая будет спавнить объекты и функцию, которая будет спавнить партикли по массиву, переданному в эту функцию. Создание функций подробно описано здесь. Share this post Link to post Share on other sites
[BE] Oubi 718 Report post Posted October 6, 2018 @Lex Посмотрел еще вчера. Насколько я помню, то в той миске заранее известна позиция для партиклей. А у меня позиции появляются случайным образом и их генерирует сервер. Я пытался сделать массив координат, который потом передавал бы каждому кто подключится, но мои познания синтаксиса А3 оказались не настолько хороши) Я даже с массивами подружится не смог (правда потратил на это около часа всего). Так же пробовал используя классы, но что-то пошло не так. Вообще походу накрылись огни на мисске. Если кто-то страдает избытком времени или же просто желает помочь, то мисска находится ниже, был бы благодарен. ForWOG_v0_1.lythium.rar Share this post Link to post Share on other sites