Перейти к публикации
Поиск в
  • Дополнительно...
Искать результаты, содержащие...
Искать результаты в...
  • Нужна помощь?

    Создайте тему в соответствующем разделе
    Не нужно писать всё в чат!
  • Загляните на торговую площадку

    Там вы можете купить
    всё что касается игровых серверов
  • Не хотите бан?

    Пожалуйста, ознакомьтесь с нашими правилами
    Не нарушайте порядок!
  • Продаёте или покупаете?

    Пользуйтесь услугами гаранта
    Мы сделаем вашу сделку безопасной

Здравствуйте.

Создал необходимые конфиги для источника звука.

Суть исполнения такова:
При вызове функции: Создается источник звука ( изначально определенный ), который крепится к игроку и соответственно воспроизводится звук. 

При повторном вызове функции ( в идеале с мощью другой функции ) : удаляется ранее прикрепленный источник звука к игроку, соответственно прекращается воспроизведение звука .  

Мои неудачные попытки реализации:

 

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 

Источник звука при первом вызове прикрепляется к игроку, т.е. функция срабатывает правильно. При втором вызове  - звук не атачится, но и не удаляется первый источник звука. При третьем вызове так же прикрепляется еще один источник звука и получается каша из двух звуков. 

 

Задумка:

Что-то типа плеера, у которого есть несколько кнопок, каждая из которых вызывает функцию с воспроизведением музыки ( аттачит источник звука ) и одна доп. кнопка которая бы удаляля все источники звука приаттаченные на игроке с помощью все тех же функций упомянутых ранее. Ну или же при повторном вызове одной и той же функции при первом вызове: аттачился звук, при повторном вызове функции: удалялся ранее приаттаченный источник звука.

Наведите на правильный путь в исполнении данной задумки.

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


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

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

  • 0
34 минуты назад, FiQ сказал:

private["_sound1",];

После этого можно было бы и не смотреть далее...

34 минуты назад, FiQ сказал:

создана глобальная переменная

Ок.

35 минут назад, FiQ сказал:

deleteVehicle _sound1;

Глобальные переменные "освоены" только на половину?(подсказка в данной строке)...

37 минут назад, FiQ сказал:

но и не удаляется первый источник звука.

Еще бы... см. выше.

 

P.S.

А я ж тебе советовал купить букварь)

 

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


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





  • 0

NoNameUltima Разобрался 

Сделал "_sound1" в "sound1" и заработало :D  Спасибо, не подумал. 

Касательно "букваря" - не нашел :(

 

Вопрос в догоночку, а не будет ли второй игрок удалять источник звука который вызван первым игроком при вызове функции на своей стороне? Ибо протестить со вторым игроком нет возможности.

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


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

FiQ Ну если второй игрок сядет за комп первого игрока, то наверное будет - счелкая кнопками.

Глобальная она только в его клиенте. Как и функция.

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


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

NoNameUltima Благодарю за помощь, тему можно закрывать.

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


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

Создайте аккаунт или войдите в него для комментирования

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

Создать аккаунт

Зарегистрируйтесь для получения аккаунта. Это просто!

Зарегистрировать аккаунт

Войти

Уже зарегистрированы? Войдите здесь.

Войти сейчас

  • Похожие публикации

    • Автор: BorizzK
      Вот предположим мы создали где-то экземпляр класса;
      ref Class newClass = new Class();
       
      1 Он удалится сам? При каких условиях?
      2 Как его удалить принудительно если он больше не нужен?
       
    • Автор: 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 секунда да же
      НО! обьекты эти после рестарта опять на месте
       
      Пока придумал костыль - сохраняю в профиль сервера при каждом спавне координаты и тайпнеймы заспавленных обьектов и при запуске в конструкторе проверяю это место и грохаю обьекты по тайпнеймам - места безлюдные и открытые, лагерей и тп там быть не может - потому в принципе ничего лишнего туда попасть не может
      к тому же это полезно в случае крашей
       
      и все же
      почему обьекты не удаляются при завершении работы сервера?
       
    • Автор: krovn
      Доброго времени суток,
       
      Допиливая сборку столкнулся с проблемой что постройки из Alchemical crafting не получают урона и их невозможно уничтожить.
      Проблему частично решил - добавлением HandleDamage, но вот до БД это не доходит и даже уничтоженные объекты после рестарта появляются снова...
       
      есть идеи?
    • Автор: 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]                         };         };  
  • Наш выбор

×
×
  • Создать...

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

Используя этот сайт, вы автоматически обязуетесь соблюдать наши Правила и Политика конфиденциальности.
Чтобы сделать этот веб-сайт лучше, мы разместили cookies на вашем устройстве. Вы можете изменить свои настройки cookies, в противном случае мы будем считать, что вы согласны с этим.