Jump to content
Search In
  • More options...
Find results that contain...
Find results in...
  • 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 servers
  • Don'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
Sign in to follow this  
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 раз только срабатывает

Share this post


Link to post
Share on other sites

3 answers to this question

Recommended Posts

  • 0

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

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

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

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

 

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

Share this post


Link to post
Share on other sites



  • 0

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

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

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

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

 

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

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

Share this post


Link to post
Share on other sites
  • 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 {};

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

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

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
Sign in to follow this  

×
×
  • Create New...

Important Information

By using this site, you automaticly agree to our Guidelines and Privacy Policy.
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.