Need help?
Create a topic in the appropriate section
Don't write everything in the chat!Take a look at the marketplace
There you can buy
everything related to game serversDon't want a ban?
Please read our rules
Don't disturb the order!Sell or buy?
Use services of the guarantor
We will make your deal safe
- 0
-
Similar Content
-
By BorizzK
Вобщем в процессе работы сервера происходят рандомные динамические события и вместе с ними на карте спавнятся некоторые обьекты
Если время их жизни истекает и настает время нового события и в радиусе видимости нет игроков обьекты удаляются с карты
Но
Если выключение корректно (запланированный рестарт например), вызов функции удаления происходит из деструктора класса
Все отрабатывает
Ошибок нет
Но после рестарта некоторые обьекты на месте
Тогда я замутил функцию-задержку с проверкой
float TimeWait(Object object, float timeW) { float cTick = GetGame().GetTickTime() + timeW; while(object || GetGame().GetTickTime() < cTick ) { if ( GetGame().GetTickTime() >= cTick ) break; } return GetGame().GetTickTime(); } и вызываю ее
if (object) tW = TimeWait(object, timeW); задержка реально происходит - делал ее 60 секунда да же
НО! обьекты эти после рестарта опять на месте
Пока придумал костыль - сохраняю в профиль сервера при каждом спавне координаты и тайпнеймы заспавленных обьектов и при запуске в конструкторе проверяю это место и грохаю обьекты по тайпнеймам - места безлюдные и открытые, лагерей и тп там быть не может - потому в принципе ничего лишнего туда попасть не может
к тому же это полезно в случае крашей
и все же
почему обьекты не удаляются при завершении работы сервера?
-
By FiQ
Здравствуйте.
Создал необходимые конфиги для источника звука.
Суть исполнения такова:
При вызове функции: Создается источник звука ( изначально определенный ), который крепится к игроку и соответственно воспроизводится звук.
При повторном вызове функции ( в идеале с мощью другой функции ) : удаляется ранее прикрепленный источник звука к игроку, соответственно прекращается воспроизведение звука .
Мои неудачные попытки реализации:
test_sound1 = { private["_sound1","_sound1Flag"]; _sound1Flag = false; if(_sound1Flag) then{ deleteVehicle _sound1; _sound1Flag = false; }else{ _sound1 = createSoundSource ["2000_baksov_mp3", [0,0,0], [], 0]; _sound1 attachTo [player,[0,0,1]]; _sound1Flag = true; }; }; test_sound1 = { private["_sound1","_sound1Flag"]; if(_sound1Flag) then{ _sound1 = createSoundSource ["2000_baksov_mp3", [0,0,0], [], 0]; _sound1 attachTo [player,[0,0,1]]; _sound1Flag = false; }else{ deleteVehicle _sound1; _sound1Flag = true; }; }; test_sound1 = { private["_sound1",]; if(sound1Flag) then{ _sound1 = createSoundSource ["2000_baksov_mp3", [0,0,0], [], 0]; _sound1 attachTo [player,[0,0,1]]; sound1Flag = false; }else{ deleteVehicle _sound1; sound1Flag = true; }; }; В последнем варианте создана глобальная переменная, значение которой указано по дефолту "Истина" в initPlayerLocal.sqf
Источник звука при первом вызове прикрепляется к игроку, т.е. функция срабатывает правильно. При втором вызове - звук не атачится, но и не удаляется первый источник звука. При третьем вызове так же прикрепляется еще один источник звука и получается каша из двух звуков.
Задумка:
Что-то типа плеера, у которого есть несколько кнопок, каждая из которых вызывает функцию с воспроизведением музыки ( аттачит источник звука ) и одна доп. кнопка которая бы удаляля все источники звука приаттаченные на игроке с помощью все тех же функций упомянутых ранее. Ну или же при повторном вызове одной и той же функции при первом вызове: аттачился звук, при повторном вызове функции: удалялся ранее приаттаченный источник звука.
Наведите на правильный путь в исполнении данной задумки.
-
By krovn
Доброго времени суток,
Допиливая сборку столкнулся с проблемой что постройки из Alchemical crafting не получают урона и их невозможно уничтожить.
Проблему частично решил - добавлением HandleDamage, но вот до БД это не доходит и даже уничтоженные объекты после рестарта появляются снова...
есть идеи?
-
By NoNameUltima
Массивы и циклы.
*Мб кому то будет полезно.
В. В чем различие цикла forEach от цикла for
О. Цикл forEach создает копию массива в памяти, и служит для быстрого поиска в массиве заданного элемента.
Но удалять внутри данного цикла элементы массива нельзя, т.к. будут смещены индексы, и изменится длина массива.(см. пример ниже для цикла for)
В. В чем отличие цикла
for "_i" from 0 to _xxx do
от цикла
for "_i" from _xxx to 0 step -1 do О. Цикл:
for "_i" from 0 to _xxx do Перебирает массив, и Вы можете менять элементы массива, но если Вам необходимо, внутри цикла удалять элементы массива, Вам необходим обратный цикл:
for "_i" from _xxx to 0 step -1 do Пример некорректного использования цикла:
for "_i" from 0 to _xxx do Предположим у вас есть массив:
_xxx = [0,2,9,0,2]; Как видим, в нем 4 элемента(счет идет с нуля).
Ваша задача, удалить элементы больше 1.
Неправильный цикл:
for "_i" from 0 to count _xxx do // Цикл от нуля и до 4(кол-во элементов массива) { if ( (_xxx select _i) > 1 ) then // Если текущий элемент больше 1 - { _xxx set [_i, -1]; // Заменить текущий элемент массива на -1 _xxx = _xxx - [-1]; // Удалить в массиве элемент [-1] }; };
При нулевой итерации цикла, будет взято цисло из массива = 0. Число больше 1 - Цикл переходит на следующую итерацию. Первая итерация - число будет = 2. Число больше 1 - Данный элемент будет удален. Следующая итерация возьмет число 0!!!
В. Почему 0, почему не 9?
О. После удаления элемента массива, его счетчик так же будет изменен, в следствии этого, т.к. элемента 1 равного 2, более не существует, его заменит элемент 2 равный 9.
И тут сразу 2 ошибки:
Мы пропустили элемент который должен был быть удален.
Цикл идет до 4 элементов, а у нас на втором шаге их уже стало 3, т.е. - вы получите ошибку скрипта, при доступе к несуществующему элементу списка. Правильный цикл:
for "_i" from (count _xxx) to 0 step -1 do // Цикл начиная с 4(кол-во элементов массива), и до нуля { if ( (_xxx select _i) > 1 ) then // Если текущий элемент больше 1 - { _xxx set [_i, -1]; // Заменить текущий элемент массива на -1 _xxx = _xxx - [-1]; // Удалить в массиве элемент [-1] }; };
-
Our picks
Вот предположим мы создали где-то экземпляр класса;
ref Class newClass = new Class();
1 Он удалится сам? При каких условиях?
2 Как его удалить принудительно если он больше не нужен?
Share this post
Link to post
Share on other sites