Skocz do zawartości

Witamy w Nieoficjalnym polskim support'cie AMX Mod X

Witamy w Nieoficjalnym polskim support'cie AMX Mod X, jak w większości społeczności internetowych musisz się zarejestrować aby móc odpowiadać lub zakładać nowe tematy, ale nie bój się to jest prosty proces w którym wymagamy minimalnych informacji.
  • Rozpoczynaj nowe tematy i odpowiedaj na inne
  • Zapisz się do tematów i for, aby otrzymywać automatyczne uaktualnienia
  • Dodawaj wydarzenia do kalendarza społecznościowego
  • Stwórz swój własny profil i zdobywaj nowych znajomych
  • Zdobywaj nowe doświadczenia

Dołączona grafika Dołączona grafika

Guest Message by DevFuse
 

Dodanie warunku (else if)


  • Nie możesz napisać tematu
  • Zaloguj się, aby dodać odpowiedź
8 odpowiedzi w tym temacie

#1 Gość_kubek_*

  • Gość

Reputacja: 0

Offline

Napisano 14.01.2013 20:07

Witam, nawiązują do tego kodu:


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 ? :P Ponieważ działa tylko ta pierwsza funkcja licząca od 1.0 dmg.

Z góry dziękuje za pomoc :)

Użytkownik kubek edytował ten post 14.01.2013 20:07


#2 radim

    Godlike

  • Moderator

Reputacja: 939
Master

  • Postów:2 725
  • Steam:steam
  • Imię:Arkadiusz
  • Lokalizacja:Janów Lub.
Offline

Napisano 14.01.2013 21:43


else if( ( Xdamage[0] == Damage[i] ) && g_playersnum > 1 && floatround(Xdamage[0]) > 999)

  • +
  • -
  • 0

Chcąc napisać do mnie prywatną wiadomość, wpierw zapoznaj się ze stroną "O mnie" w moim profilu użytkownika [ radim ] !


#3 Gość_kubek_*

  • Autor tematu
  • Gość

Reputacja: 0

Offline

Napisano 14.01.2013 22:42

To również nie działa :P Ale i tak masz plusa za chęci :D

#4 Gość_21977_*

  • Autor tematu
  • Gość

Reputacja: 0

Offline

Napisano 15.01.2013 11:00

Instrukcje obydwu warunków są identyczne, więc stosowanie tego "else" jest zbędne.

#5 Gość_kubek_*

  • Autor tematu
  • Gość

Reputacja: 0

Offline

Napisano 15.01.2013 11:51

Już sobie poradziłem, lecz mam dodatkowe pytanie również o tą funkcję :P

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ć ?

#6 Gość_21977_*

  • Autor tematu
  • Gość

Reputacja: 0

Offline

Napisano 15.01.2013 12:07

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
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>90
oraz
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) >= 100
to nie może on być mniejszy od 50, oto odpowiedź, dlaczego warunek NIGDY nie zostanie wykonany.

#7 Gość_kubek_*

  • Autor tematu
  • Gość

Reputacja: 0

Offline

Napisano 15.01.2013 12:18

Bardzo ładnie opisane, dzięki :) Lecz mógłbym Cie prosić jeszcze, abyś pokazał taki gotowy przykład, wtedy bym lepiej zrozumiał :P

#8 Gość_21977_*

  • Autor tematu
  • Gość

Reputacja: 0

Offline

Napisano 15.01.2013 17:43

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ć.

#9 Gość_kubek_*

  • Autor tematu
  • Gość

Reputacja: 0

Offline

Napisano 15.01.2013 17:47

No więc tak:


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).




Użytkownicy przeglądający ten temat: 0

0 użytkowników, 0 gości, 0 anonimowych