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

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

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

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

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

перевод "if () then {}" в "switch () do {case}"

то ли я дурак то ли лыжи не едут....
использую такую систему:
 

if (_distance < (_range * 1)) then {hint "100%";};
if (_distance < (_range * 0.9)) then {hint "90%";};
if (_distance < (_range * 0.8)) then {hint "80%";};
if (_distance < (_range * 0.7)) then {hint "70%";};
if (_distance < (_range * 0.6)) then {hint "60%";};
if (_distance < (_range * 0.5)) then {hint "50%";};
if (_distance < (_range * 0.4)) then {hint "40%";};
if (_distance < (_range * 0.3)) then {hint "30%";};

Все нормально, чем ближе подходишь тем меньше % в хинте

А со свич кейсом беда =(
 

switch (true) do {
	case (_distance < (_range * 1)) : {hint "100%";};
	case (_distance < (_range * 0.9)) : {hint "90%";};
	case (_distance < (_range * 0.8)) : {hint "80%";};
	case (_distance < (_range * 0.7)) : {hint "70%";};
	case (_distance < (_range * 0.6)) : {hint "60%";};
	case (_distance < (_range * 0.5)) : {hint "50%";};
	case (_distance < (_range * 0.4)) : {hint "40%";};
	case (_distance < (_range * 0.3)) : {hint "30%";};
};

Срабатывает только первый кейс, и меняй не меняй позицию все пофиг, тобишь срабатывает только 1 раз, как исправить?
Пробовал весь свич-кейс уже и в цикл запихивать (for "_i" from 1 to 100) и (while (alive player) do)
Все равно 1 раз только срабатывает

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


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

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

  • 0

А почему он должен срабатывать больше?

Он так и должен работать, а вот первый вариант туп и угрюм.

т.к. при _distance равном 1, а _range равном 5, сработают все варианты.

т.е. пролетят все хинты.

 

Свитч, проверяет условие, и выбирает единственное верное(первое попавшееся, которое подходит по условию).

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


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



  • 0

А почему он должен срабатывать больше?

Он так и должен работать, а вот первый вариант туп и угрюм.

т.к. при _distance равном 1, а _range равном 5, сработают все варианты.

т.е. пролетят все хинты.

 

Свитч, проверяет условие, и выбирает единственное верное(первое попавшееся, которое подходит по условию).

ну я первый вариант не полностью выкладывал, там дело в том что дистанс это растояние от епицентра до игрока, а рендж это статическое растояние от епицентра, но по фактц работает правильно хотя и в последнем варианте получаются все хинты проходят но отображает правильно.

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


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

 

А почему он должен срабатывать больше?

Он так и должен работать, а вот первый вариант туп и угрюм.

т.к. при _distance равном 1, а _range равном 5, сработают все варианты.

т.е. пролетят все хинты.

 

Свитч, проверяет условие, и выбирает единственное верное(первое попавшееся, которое подходит по условию).

ну я первый вариант не полностью выкладывал, там дело в том что дистанс это растояние от епицентра до игрока, а рендж это статическое растояние от епицентра, но по фактц работает правильно хотя и в последнем варианте получаются все хинты проходят но отображает правильно.

Все верно, это я ошибся. Case выборка будет такой же.

Хотя по идее написание должно быть, чем то вроде -

 

 

switch (_distance) do 
{
    case (< (_range * 1)) : {hint "100%";};
    case (< (_range * 0.9)) : {hint "90%";};
    case (< (_range * 0.8)) : {hint "80%";};
    case (< (_range * 0.7)) : {hint "70%";};
    case (< (_range * 0.6)) : {hint "60%";};
    case (< (_range * 0.5)) : {hint "50%";};
    case (< (_range * 0.4)) : {hint "40%";};
    case (< (_range * 0.3)) : {hint "30%";};
};

 

 

не знаю будет так работать или нет.

Но один хрен выборка хинтов не верная. Или надо писать после выборки - exitWith {};

Чтобы выбирал единственное значение.

И начинать снизу вверх - от наименьшего к наибольшему, чтобы было выбрано правильно.

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


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

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

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

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

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

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

Войти

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

Войти сейчас

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

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

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