Jump to content
Oubi

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

Recommended Posts

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

Share this post


Link to post
Share on other sites

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

Share this post


Link to post
Share on other sites

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

 

Share this post


Link to post
Share on other sites

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

Share this post


Link to post
Share on other sites

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

ForWOG_v0_1.lythium.rar

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

  • Recently Browsing   0 members

    No registered users viewing this page.

×

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.