Dodanie warunku (else if)
Gość_kubek_* 14.01.2013
Witam, nawiązują do tego kodu:
Zamieniając to:
na:
Jak zrobić, żeby to zadziałało ? Ponieważ działa tylko ta pierwsza funkcja licząca od 1.0 dmg.
Z góry dziękuje za pomoc
Edited by kubek, 14.01.2013 20:07.
public EndRound()
{
for(new i = 0;i<33;i++)
{
Xdamage[i] = Damage[i];
}
SortFloats(Xdamage, 33, Sort_Descending);
for(new i = 0; i<33; i++)
{
if(!is_user_connected(i))
{
continue;
}
static szName[32];
get_user_name(i, szName, sizeof(szName)-1);
floatround(Xdamage[i], floatround_floor);
if( ( Xdamage[0] == Damage[i] ) && g_playersnum > 1 && floatround(Xdamage[0]) > 999)
{
client_print(0, print_chat, "Najwiecej obrazen zadal %s (%d obrazen!).", szName, floatround(Xdamage[0]) );
break;
}
}
}
Zamieniając to:
if( ( Xdamage[0] == Damage[i] ) && g_playersnum > 1 && floatround(Xdamage[0]) > 999)
{
client_print(0, print_chat, "Najwiecej obrazen zadal %s (%d obrazen!).", szName, floatround(Xdamage[0]) );
break;
}
na:
if( ( Xdamage[0] == Damage[i] ) && g_playersnum > 1 && floatround(Xdamage[0]) > 1.0)
{
client_print(0, print_chat, "Najwiecej obrazen zadal %s (%d obrazen!).", szName, floatround(Xdamage[0]) );
}
else if if( ( Xdamage[0] == Damage[i] ) && g_playersnum > 1 && floatround(Xdamage[0]) > 999)
{
client_print(0, print_chat, "Najwiecej obrazen zadal %s (%d obrazen!).", szName, floatround(Xdamage[0]) );
break;
}
Jak zrobić, żeby to zadziałało ? Ponieważ działa tylko ta pierwsza funkcja licząca od 1.0 dmg.
Z góry dziękuje za pomoc
Edited by kubek, 14.01.2013 20:07.
radim
14.01.2013
else if( ( Xdamage[0] == Damage[i] ) && g_playersnum > 1 && floatround(Xdamage[0]) > 999)
Gość_21977_* 15.01.2013
Instrukcje obydwu warunków są identyczne, więc stosowanie tego "else" jest zbędne.
Gość_kubek_* 15.01.2013
Już sobie poradziłem, lecz mam dodatkowe pytanie również o tą funkcję
Kod Micza:
Rejestracja pleców gracza, aktywacja powyżej funkcji: if(dif>90)
Jeżeli dodam w else dif>90 to ignoruje również if'a. Miałbym ktoś pomysł jak to zrobić ?
Kod Micza:
new Float: aim[2][3]
new Float: dif
entity_get_vector(ofiara, EV_VEC_v_angle, aim[0])
entity_get_vector(atakujacy, EV_VEC_v_angle, aim[1])
if(aim[0][1]<0) aim[0][1]+=360.0
if(aim[1][1]<0) aim[0][1]-=360.0
if(aim[0][1]>aim[1][1]) dif = aim[0][1]-aim[1][1]
else dif = aim[1][1]-aim[0][1]
Rejestracja pleców gracza, aktywacja powyżej funkcji: if(dif>90)
if(get_speed(player) < 100){
fNormal[0] *= fMulti;
fNormal[1] *= fMulti;
fNormal[2] += 55.0;
}
else if(get_speed(player) < 50 && dif>90) /* TUTAJ CHCIAŁEM, ABY AKTYWOWAĆ FUNKCJĘ REJESTROWANIA PLECÓW GRACZA */
{
fNormal[0] *= fMulti;
fNormal[1] *= fMulti;
fNormal[2] += 110.0;
}
Jeżeli dodam w else dif>90 to ignoruje również if'a. Miałbym ktoś pomysł jak to zrobić ?
Gość_21977_* 15.01.2013
Myślę, że źle zrozumiałeś działanie ELSE.
Funkcja IF sprawdza, czy podany warunek w nawiasie okrągłym jest prawdą (ostatecznie, czy wartość bitowa wyrażenia jest różna od zera).
Jeśli warunek wewnątrz nawiasu okrągłego zostanie spełniony, wykonana zostanie instrukcja bezpośrednio za nawiasem, bądź seria instrukcji zawarta w nawiasie klamrowym.
ELSE podane czy to za klamrą bloku instrukcji, czy za pojedynczą instrukcją, wykona, podobnie instrukcję, bądź blok instrukcji okolony nawiasem klamrowym, tylko i wyłącznie
wtedy, gdy warunek z nawiasu okrągłego IF NIE ZOSTANIE spełniony.
Podany przez Ciebie warunek w nawiasie okrągłym to
tak więc instrukcja z ELSE zostanie wywołana TYLKO I WYŁĄCZNIE WTEDY, GDY ten warunek NIE BĘDZIE PRAWDZIWY.
Oznacza to, że ELSE zostanie wywołany wtedy, gdy
Twoja instrukcja ELSE (wywoływana przy get_speed(player) nie mniejszym od 100) zawiera kolejną instrukcję warunkową IF, w której jako warunek podajesz koniunkcję
Jest to błąd i warunek ten NIGDY nie będzie prawdziwy, a więc instrukcja wewnątrz tego zagnieżdżonego IFa NIGDY nie zostanie wykonana.
Skoro IF jest wywoływany, gdy
Funkcja IF sprawdza, czy podany warunek w nawiasie okrągłym jest prawdą (ostatecznie, czy wartość bitowa wyrażenia jest różna od zera).
Jeśli warunek wewnątrz nawiasu okrągłego zostanie spełniony, wykonana zostanie instrukcja bezpośrednio za nawiasem, bądź seria instrukcji zawarta w nawiasie klamrowym.
ELSE podane czy to za klamrą bloku instrukcji, czy za pojedynczą instrukcją, wykona, podobnie instrukcję, bądź blok instrukcji okolony nawiasem klamrowym, tylko i wyłącznie
wtedy, gdy warunek z nawiasu okrągłego IF NIE ZOSTANIE spełniony.
Podany przez Ciebie warunek w nawiasie okrągłym to
get_speed(player) < 100
tak więc instrukcja z ELSE zostanie wywołana TYLKO I WYŁĄCZNIE WTEDY, GDY ten warunek NIE BĘDZIE PRAWDZIWY.
Oznacza to, że ELSE zostanie wywołany wtedy, gdy
!(get_speed(player) < 100)czyli wtedy, gdy
get_speed(player) >= 100
Twoja instrukcja ELSE (wywoływana przy get_speed(player) nie mniejszym od 100) zawiera kolejną instrukcję warunkową IF, w której jako warunek podajesz koniunkcję
dif>90oraz
get_speed(player) < 50
Jest to błąd i warunek ten NIGDY nie będzie prawdziwy, a więc instrukcja wewnątrz tego zagnieżdżonego IFa NIGDY nie zostanie wykonana.
Skoro IF jest wywoływany, gdy
get_speed(player) >= 100to nie może on być mniejszy od 50, oto odpowiedź, dlaczego warunek NIGDY nie zostanie wykonany.
Gość_kubek_* 15.01.2013
Bardzo ładnie opisane, dzięki Lecz mógłbym Cie prosić jeszcze, abyś pokazał taki gotowy przykład, wtedy bym lepiej zrozumiał
Gość_21977_* 15.01.2013
Tylko napisz, co chcesz uzyskać, bo z obecnego kodu trudno jest wydedukować, co właściwie miał on czynić.
Innymi słowy, opisz nam algorytm, który pragniesz zaimplementować.
Innymi słowy, opisz nam algorytm, który pragniesz zaimplementować.
Gość_kubek_* 15.01.2013
No więc tak:
Jeżeli prędkość gracza będzie wynosiła np. 100 (jak w przykładzie) to chciałbym, aby ustawiało:
A jeżeli prędkość gracza będzie mniejsza czyli to przykładowe 50 + tylko wtedy kiedy będzie odwrócony plecami czyli dif>90 aby ustawiało siłę na tą:
Jeżeli jest źle, to proszę mnie poprawić, wykombinowałem takie coś:
Dodatkowo dorzuciłem, iż gracz musi kucać + plecy gracza. Czyli patrząc na taką funkcję, przy ifie powinno pobierać tylko prędkość gracza, a przy else if kucanie + plecy gracza, dobrze to rozumiem ?
Jako, iż nie mogę edytować posta piszę post pod postem (proszę moderatora o połączenie postów).
if(get_speed(player) < 100){
Jeżeli prędkość gracza będzie wynosiła np. 100 (jak w przykładzie) to chciałbym, aby ustawiało:
fNormal[2] += 55.0;
A jeżeli prędkość gracza będzie mniejsza czyli to przykładowe 50 + tylko wtedy kiedy będzie odwrócony plecami czyli dif>90 aby ustawiało siłę na tą:
fNormal[2] += 110.0;
Jeżeli jest źle, to proszę mnie poprawić, wykombinowałem takie coś:
if(get_speed(id) < 100 && !(get_user_button(id) & IN_DUCK) && !(dif>90))
Dodatkowo dorzuciłem, iż gracz musi kucać + plecy gracza. Czyli patrząc na taką funkcję, przy ifie powinno pobierać tylko prędkość gracza, a przy else if kucanie + plecy gracza, dobrze to rozumiem ?
Jako, iż nie mogę edytować posta piszę post pod postem (proszę moderatora o połączenie postów).