Перейти к содержанию
Oubi

Нужна помощь с партиклями в MP

Рекомендуемые сообщения

Вообщем есть у меня скрипт спавнящий хлам в определенном радиусе (вызывается через initServer.sqf), во время спавна, рандомный хлам так же еще и "поджигается" с помощью партиклей. Проблема состоит в том что спавн хлама работает верно, а партикли не отображаются вовсе. Так же пробовал альтернативный метод (забыл какой) где в итоге я получил правильно заспавненный мусор и несинхронизированный между игроками "поджог" мусора.
Как мне синхронизировать  транспорт (уже работает) и партикли?
Если вариантов 0, то могу разделить скрипт на две части (отдельно спавн ВСЕГО мусора, а потом уже рандомный поджог мусора).

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Внезапно надумал возможное решение, остались только вопросы по его оптимальности.
Вообщем вместо рандомного спавна огня, рандомно спавню объект "N" (поскольку объекты уже синхронизированы). А уже потом при подключении игрока - для него локально будет создаваться огонь в местах где стоит объект "N". Таким образом клиентская часть скрипта будет работать как и положено, но появится еще несколько "мусорных" объектов (но это еще не точно) которые будут хавать ресурсы(9

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

@DAP я пересмотрел скрип и скорей всего нашел причину ошибки. Я создавал партикли с помощью createVehicleLocal (SP only), в MP не работает), а теперь создаю через createVehicle (работоспособность еще не проверял). Как думаешь? Поможет? Код ниже.
 

jmtXvnp.png

Спойлер

        _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;
        };

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

@Oubi Вот миссия, для которой я делал партиклы. В папке functions все функции, отвечающие за создание огня и дыма в MP.

Результат.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

@Oubi изверг. Во-первых - createvehicle создает объект глобально. То есть он создается на всех машинах. Ты создаешь этот объект на старте миссии через init.sqf. То есть при старте миссии каждый клиент будет у себя создавать объект глобально. То есть количество объектов на миссии будет умножаться на количество клиентов, запустивших миссию, потому что каждый подключившийся клиент будет создавать глобальный объект "#particlesource". Тебе надо поступать совершенно по-другому. На сервере запускается скрипт, который создает глобальные объекты и записывает их в массив. Затем этот массив ты раздаешь на клиенты, которые используя этот массив будут у себя локально спавнить партикли по координатам этих объектов (потому что партикли ВСЕГДА локальны клиенту, на которых они заспавнены и по сети не передаются). Самый простой вариант - создать отдельно функцию, которая будет спавнить объекты и функцию, которая будет спавнить партикли по массиву, переданному в эту функцию. Создание функций подробно описано здесь.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

@Lex Посмотрел еще вчера. Насколько я помню, то в той миске заранее известна позиция для партиклей. А у меня позиции появляются случайным образом и их генерирует сервер. Я пытался сделать массив координат, который потом передавал бы каждому кто подключится, но мои познания синтаксиса А3 оказались не настолько хороши) Я даже с массивами подружится не смог (правда потратил на это около часа всего). Так же пробовал используя классы, но что-то пошло не так. Вообще походу накрылись огни на мисске.
Если кто-то страдает избытком времени или же просто желает помочь, то мисска находится ниже, был бы благодарен.

ForWOG_v0_1.lythium.rar

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Для публикации сообщений создайте учётную запись или авторизуйтесь

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

Создать учетную запись

Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!

Регистрация нового пользователя

Войти

Уже есть аккаунт? Войти в систему.

Войти

  • Последние посетители   0 пользователей онлайн

    Ни одного зарегистрированного пользователя не просматривает данную страницу

×

Важная информация

Мы разместили cookie-файлы на ваше устройство, чтобы помочь сделать этот сайт лучше. Вы можете изменить свои настройки cookie-файлов, или продолжить без изменения настроек.