←  Pytania

AMXX.pl: Support AMX Mod X i SourceMod

»

Zmiana HP o losową ilość

  • +
  • -
Filip1512 - zdjęcie Filip1512 24.09.2012

Cześć,
do rzeczy - chce, aby ta funkja dawała losowe hp, lecz nie działa. Na czacie informuje, że hp zostało zmienione, hp wzrasta, lecz nie działa funkcja, że jeśli hp > 100, to zmienić hp na 100

                        case 11: {
new hp = get_user_health(id)
new losowe_hp = random_num(20,50)

ColorChat(id, BLUE, "Otrzymujesz dodatkowe %dhp i granat na pocieszenie :)", losowe_hp)
cs_set_user_money(id, (cs_get_user_money(id)-get_cvar_num("kasa_bonus")), 1)
give_item(id, "weapon_hegrenade")
dodatkowe_hp[id] = true;

if(dodatkowe_hp[id] == true && is_user_alive(id)){
set_user_health(id, hp+losowe_hp)
}
else if(get_user_health(id) > 100)
set_user_health(id, 100)
}

Co tu jest źle?
Użytkownik `NN edytował ten post 24.09.2012 21:40
Odpowiedz

  • +
  • -
Zapalka - zdjęcie Zapalka 25.09.2012

Źle jest tutaj:

if(dodatkowe_hp[id] == true && is_user_alive(id)){
set_user_health(id, hp+losowe_hp)
}
else if(get_user_health(id) > 100) set_user_health(id, 100)

Jeśli "if" się wykona to "else if" się nie wykona, i na odwrót jeżeli "if" się nie wykona to "else if" się wykona. "else if" oznacza "jeżeli nie".
Więc aby działało musisz postawić dwa niezależne warunki.


if(dodatkowe_hp[id] == true && is_user_alive(id)){
set_user_health(id, hp+losowe_hp)
}
if(get_user_health(id) > 100) set_user_health(id, 100)
Odpowiedz

  • +
  • -
Filip1512 - zdjęcie Filip1512 25.09.2012

Zapomniałem dopisać do pierwszego postu, że właśnie przy zwykłym ifie było tak samo.
Odpowiedz

  • +
  • -
Zapalka - zdjęcie Zapalka 25.09.2012

A logi jakieś plugin wywala w trybie debugowania?
Odpowiedz

  • +
  • -
Dimision - zdjęcie Dimision 25.09.2012

Może spróbuj dodać set_task. Mi kiedyś pomogło.
Odpowiedz

  • +
  • -
Pan PrO - zdjęcie Pan PrO 25.09.2012

Sprawdź to


case 11:
{
new hp = get_user_health(id)
new losowe_hp = random_num(20,50)

ColorChat(id, BLUE, "Otrzymujesz dodatkowe %dhp i granat na pocieszenie :)", losowe_hp);
cs_set_user_money(id, cs_get_user_money(id)-get_cvar_num("kasa_bonus"));
give_item(id, "weapon_hegrenade");

if(is_user_alive(id))
{
if(get_user_health(id) > 100)
set_user_health(id, 100);
else set_user_health(id, hp+losowe_hp);
}
}
Odpowiedz

  • +
  • -
ogieR8 - zdjęcie ogieR8 26.09.2012

Moze pomoże Ci is_user_connected(id), a na dodatek nie dałeś zabezpieczenia, czy gracz ma taką kasę, by to kupić. Jak ma 5$, a to np kosztuje 10$, to będzie miał na minusie, a nie powinien mieć, wywali Ci błędami. Sprawdzeń typu alive, is_bot, connected, spectator nigdy za wiele, sam o tym sie przekonalem w evencie round_start nie raz.. niby glupie connected, a nic nie chcialo dzialac ; d
Użytkownik ogieR- edytował ten post 26.09.2012 22:43
Odpowiedz

Gość_21977_* 16.10.2012

@up jeśli jest is_user_alive, to is_user_connected zawsze w tym wypadku będzie prawdziwe.
Można mieć ujemną sumę pieniędzy, nic nie stoi na przeszkodzie i żadnych errorów nie będzie.
A is_user_bot nie zdaje żadnego rezultatu w tym wypadku, gdyż bot i tak symuluje gracza z AI.

@topic:
new hp = get_user_health(id)
new losowe_hp = random_num(20,50)

ColorChat(id, BLUE, "Otrzymujesz dodatkowe %dhp i granat na pocieszenie :)", losowe_hp);
cs_set_user_money(id, cs_get_user_money(id)-get_cvar_num("kasa_bonus"));
give_item(id, "weapon_hegrenade");

set_user_health(id, min(hp+losowe_hp,100));
Odpowiedz

  • +
  • -
radim - zdjęcie radim 17.10.2012

Btw. dla autora tematu, zamiast:
if(dodatkowe_hp[id] == true && is_user_alive(id))
używaj tak:
if(dodatkowe_hp[id] && is_user_alive(id))
gdyż tak jest bardziej "estetyczniej"
A gdy zwracasz false to wykrzyknik przed zmienną, ale to chyba już wiesz ;D
Odpowiedz