←  Pytania

AMXX.pl: Support AMX Mod X i SourceMod

»

Łączenie warunków "if"


Best Answer dasiek 12.10.2021 07:23

Lecimy gumową kaczuszką!

Twój warunek wygląda tak - 
 

Jeśli użytkownik NIE JEST 
- hltv 
  ORAZ
- Użytkownikiem steam
  ORAZ
- Botem
  ORAZ
- Nie ma flagi ADMIN_LEVEL_G

Użytkownik musi spełnić te wszystkie warunki i na nim negujesz. 

Szybki test ze sprawdzania (js ale logiczne operatory są te same)

let isHltv = false;
let isSteam = false;
let isBot = false;
let hasFlag = false;


if(!isHltv && !isSteam && !isBot && !hasFlag) {
    console.log('dupa');
}
// 'dupa'

Wszystkie flagi są ustawione na false (czyli użytkownik nie jest botem, nie jest steamem, nie jest hltv i nie ma flagi). Teraz jest, jak użytkownik spełnia wszystkie te warunki


let isHltv = true;
let isSteam = true;
let isBot = true;
let hasFlag = true;


if(!(isHltv && isSteam && isBot && hasFlag)) {
    console.log('dupa');
}
// undefined - nic nie wypisało

zakładając, że zamieniamy console.log z dupą na uruchomienie taska, task się nie uruchomi. Ale jeśli przynajmniej jeden z tych warunków będzie true, task się uruchomi

let isHltv = true;
let isSteam = false;
let isBot = false;
let hasFlag = false;


if(!(isHltv && isSteam && isBot && hasFlag)) {
    console.log('dupa');
}
// 'dupa'

W tej sytuacji, proponuję każdą flagę sprawdzać oddzielnie, nie grupować w nawiasach. 

Przykładowo - Twój task ma się uruchomić dla użytkowników którzy
- Nie są botami

- nie są steam

- Nie są botem

- Nie mają fagi

Korzystając z tego samego kodu, tylko dodając sprawdzenie na każdym warunku 

let isHltv = true;
let isSteam = false;
let isBot = false;
let hasFlag = false;


if(!isHltv && !isSteam && !isBot && !hasFlag) {
    console.log('dupa');
}

// undefined - nie wyświetla się


let isHltv = false;
let isSteam = false;
let isBot = false;
let hasFlag = true;


if(!isHltv && !isSteam && !isBot && !hasFlag) {
    console.log('dupa');
}
// undefined - nie wyświetla się

Więc, jeśli chcesz, aby task nie wykonywał się, dla osób, które są botem albo hltv albo steamem albo nie maja flagi (słowo klucz, w Twoim przypadku było na głos Sobie przeczytaj to zdanie raz ze słowem albo a raz ze słowem "i") nie mają tej flagi warunek powinien wyglądać tak :

if(!is_user_hltv(id) && !is_steam(id) && !is_user_bot(id) && !(get_user_flags(id) & ADMIN_LEVEL_G))

PS - kod który podałem śmiało możesz wrzucić np w konsole js w przeglądarce i pobawić się tym sam.

Go to the full post

  • +
  • -
PANDA_2zl's Photo PANDA_2zl 11.10.2021

Stworzyłem coś takiego

if(!(is_user_hltv(id) && is_steam(id) && is_user_bot(id) && get_user_flags(id) & ADMIN_LEVEL_G))

wszystko ma byc zanegowane, czy to jest poprawnie?

 

I pytanko nr. 2, czy można łączyć zanegowane warunki z tymi nie negowanymi, czy trzeba osobno pisac?

 

przykład:

if(is_steam(id)){
if(!(get_user_flags(id) & ADMIN_LEVEL_G)){

Edited by SezonowyGracz, 11.10.2021 16:27.
Quote

  • +
  • -
DarkGL's Photo DarkGL 11.10.2021

A jaki dokładnie efekt tym warunkiem chcesz osiągnąć ?

Quote

  • +
  • -
PANDA_2zl's Photo PANDA_2zl 11.10.2021

By task nie uruchamiał się przy tych użytkownikach, chodzi tylko o to że chce to złączyć razem, by nie był if pod if'em
Edited by SezonowyGracz, 11.10.2021 18:49.
Quote

  • +
  • -
N1K1Cz's Photo N1K1Cz 12.10.2021

Jeżeli chcesz aby to był jeden if i oba warunki musza być spełnione to zrób tak:
if(is_steam(id) && !(get_user_flags(id) & ADMIN_LEVEL_G))
Quote

  • +
  • -
Best Answer dasiek's Photo dasiek 12.10.2021

Lecimy gumową kaczuszką!

Twój warunek wygląda tak - 
 

Jeśli użytkownik NIE JEST 
- hltv 
  ORAZ
- Użytkownikiem steam
  ORAZ
- Botem
  ORAZ
- Nie ma flagi ADMIN_LEVEL_G

Użytkownik musi spełnić te wszystkie warunki i na nim negujesz. 

Szybki test ze sprawdzania (js ale logiczne operatory są te same)

let isHltv = false;
let isSteam = false;
let isBot = false;
let hasFlag = false;


if(!isHltv && !isSteam && !isBot && !hasFlag) {
    console.log('dupa');
}
// 'dupa'

Wszystkie flagi są ustawione na false (czyli użytkownik nie jest botem, nie jest steamem, nie jest hltv i nie ma flagi). Teraz jest, jak użytkownik spełnia wszystkie te warunki


let isHltv = true;
let isSteam = true;
let isBot = true;
let hasFlag = true;


if(!(isHltv && isSteam && isBot && hasFlag)) {
    console.log('dupa');
}
// undefined - nic nie wypisało

zakładając, że zamieniamy console.log z dupą na uruchomienie taska, task się nie uruchomi. Ale jeśli przynajmniej jeden z tych warunków będzie true, task się uruchomi

let isHltv = true;
let isSteam = false;
let isBot = false;
let hasFlag = false;


if(!(isHltv && isSteam && isBot && hasFlag)) {
    console.log('dupa');
}
// 'dupa'

W tej sytuacji, proponuję każdą flagę sprawdzać oddzielnie, nie grupować w nawiasach. 

Przykładowo - Twój task ma się uruchomić dla użytkowników którzy
- Nie są botami

- nie są steam

- Nie są botem

- Nie mają fagi

Korzystając z tego samego kodu, tylko dodając sprawdzenie na każdym warunku 

let isHltv = true;
let isSteam = false;
let isBot = false;
let hasFlag = false;


if(!isHltv && !isSteam && !isBot && !hasFlag) {
    console.log('dupa');
}

// undefined - nie wyświetla się


let isHltv = false;
let isSteam = false;
let isBot = false;
let hasFlag = true;


if(!isHltv && !isSteam && !isBot && !hasFlag) {
    console.log('dupa');
}
// undefined - nie wyświetla się

Więc, jeśli chcesz, aby task nie wykonywał się, dla osób, które są botem albo hltv albo steamem albo nie maja flagi (słowo klucz, w Twoim przypadku było na głos Sobie przeczytaj to zdanie raz ze słowem albo a raz ze słowem "i") nie mają tej flagi warunek powinien wyglądać tak :

if(!is_user_hltv(id) && !is_steam(id) && !is_user_bot(id) && !(get_user_flags(id) & ADMIN_LEVEL_G))

PS - kod który podałem śmiało możesz wrzucić np w konsole js w przeglądarce i pobawić się tym sam.

Quote