←  Problemy

AMXX.pl: Support AMX Mod X i SourceMod

»

Sprawdanie czy zmienna jest liczbą

  • +
  • -
sebacs2 - zdjęcie sebacs2 03.01.2013

Witam chce sprawdzić czy dana wartość jest liczbą, i potrzebuje konsultacji

np. takie coś

new monety = cod_get_user_coins(id);

if(is_str_num(monety))
{
// tak monety to liczba :)
}
else
{
//nie monety to nie liczba :(
}


No i dlaczego to nie działa, jak to zrobić aby chodziło poprawnie ?
Odpowiedz

  • +
  • -
Portek - zdjęcie Portek 03.01.2013

Pytanie podstawowe, po co sprawdzać coś co jest pewnikiem? Gdzie tu logika i jakakolwiek kwestia optymalizacji?
Odpowiedz

  • +
  • -
speedkill - zdjęcie speedkill 03.01.2013

Tak jak Portek napisał, funkcja zwraca liczbę całkowitą. Więc jaki jest sens sprawdzania tego ?

http://amxx.pl/dokum...1394/is_str_num

Sprawdza czy tekst składa się z samych cyfr (tworzy liczbę).


Nie działa Ci to, ponieważ zmienna monety nie jest stringiem.
Składnia: is_str_num(const sString[])
Odpowiedz

  • +
  • -
sebacs2 - zdjęcie sebacs2 03.01.2013

Pytanie podstawowe, po co sprawdzać coś co jest pewnikiem? Gdzie tu logika i jakakolwiek kwestia optymalizacji?


Racja, lecz cod_get_user_coins(id); w moim przypadku, staje się liczba gdy dołączymy do gry, ale pewnie się zapytacie, to czym jest ?
Właśnie, że niczym i jak dodam do HUD "monety" , to HUD się coś buguje i HUD się nie pokazuje, pokaże się dopiero jak dołączymy do drużyny, a jak wejdziemy na serwer prosto na spectate to niestety nie zobaczymy tego hud, i chce to zastąpić, coś w rodzaju gdy zmienia "nie działa" to będzie pisało "Wczytuje dane"
Bo te hud składa się z wielu zmiennych i chce, żeby jedna zmienna nie rozwalała całego hud.
Ma ktoś jakiś pomysł ?
Odpowiedz

  • +
  • -
speedkill - zdjęcie speedkill 03.01.2013

Po najmniejszej lini oporu sprawdzaj aktualny team gracza i wyświetlaj hud: http://amxx.pl/dokum...5/get_user_team
Odpowiedz

  • +
  • -
sebacs2 - zdjęcie sebacs2 03.01.2013

Czy do naszych rozważań teoretycznych, takie coś by działało, czy da się to napisać prościej ? Optymalnej.

new monety = cod_get_user_coins(id);

if(get_user_team(id) == 1 || get_user_team(id) == 3)
{
	set_hudmessage(255, 255, (...)
	ShowSyncHudMsg(id, SyncHudObj2, "Zmiana 1 : %s^n Zmienna 2 :%i^nMonety : Dolacz do gry aby zobaczyc", Zmiana1, Zmiana2);
}
else
{
	set_hudmessage(255, 255, (...)
	ShowSyncHudMsg(id, SyncHudObj2, "Zmiana 1 : %s^n Zmienna 2 :%i^nMonety : i%", Zmiana1, Zmiana2, monety);
}
Odpowiedz

  • +
  • -
xenos - zdjęcie xenos 04.01.2013

get_user_team(id) == 1 

To jest oznaczenie Teamu Terro więc tutaj mały błąd
dlatego najlepiej będzie pasować 3ka czyli spec jak napisałeś i unnasigned czyli osoby nie przydzielone
get_user_team(id) == 3 // spec
get_user_team(id) == 0 // unnasigned
a co do optymalizacji to jeżeli ma się wyświetlać w 1 miejscu na ekranie to nie ma potrzeby 2x wpisywać w kod set_hudmassage mała, ale jako taka oszczędność



new monety = cod_get_user_coins(id);
set_hudmessage(255, 255, (...)
if(get_user_team(id) == 0 || get_user_team(id) == 3)
{
        
        ShowSyncHudMsg(id, SyncHudObj2, "Zmiana 1 : %s^n Zmienna 2 :%i^nMonety : Dolacz do gry aby zobaczyc", Zmiana1, Zmiana2);
}
else
{
        
        ShowSyncHudMsg(id, SyncHudObj2, "Zmiana 1 : %s^n Zmienna 2 :%i^nMonety : i%", Zmiana1, Zmiana2, monety);
}


Użytkownik xenos edytował ten post 04.01.2013 00:45
Odpowiedz

  • +
  • -
speedkill - zdjęcie speedkill 04.01.2013

Zawsze można sprawdzić tak:
get_user_team(id) % 3

new monety = cod_get_user_coins(id);
set_hudmessage(255, 255, (...)
if(get_user_team(id) % 3){
	ShowSyncHudMsg(id, SyncHudObj2, "Zmiana 1 : %s^n Zmienna 2 :%i^nMonety : i%", Zmiana1, Zmiana2, monety);
}
else{
	ShowSyncHudMsg(id, SyncHudObj2, "Zmiana 1 : %s^n Zmienna 2 :%i^nMonety : Dolacz do gry aby zobaczyc", Zmiana1, Zmiana2);
}
Odpowiedz

  • +
  • -
GwynBleidD - zdjęcie GwynBleidD 10.01.2013

możesz również ustawić, aby cod_get_user_coins zwracało jakąś określoną wartość, gdy monet nie da się odczytać, np -1, -999 itp...
Odpowiedz

  • +
  • -
sebacs2 - zdjęcie sebacs2 13.01.2013

możesz rozwinąć wypowiedz ? GwynBleidD
Użytkownik sebacs2 edytował ten post 13.01.2013 00:37
Odpowiedz

  • +
  • -
speedkill - zdjęcie speedkill 13.01.2013

Jak masz funkcję cod_get_user_coins(id) w niej dodaj warunek np. jeżeli monety gracza są >= 1, to zwróć ilość monet, w innym przypadku zwróć 0 lub -1. Następnie pobierasz ilość monet i warunkiem możesz sprawdzić co zwróciła funkcja cod_get_user_coins(id) ;)
Odpowiedz

  • +
  • -
sebacs2 - zdjęcie sebacs2 14.01.2013

Czyli o takie coś macie namyśli ?


new monety = cod_get_user_coins(id);
set_hudmessage(255, 255, (...)
if(monety >= 1){
ShowSyncHudMsg(id, SyncHudObj2, "Zmiana 1 : %s^n Zmienna 2 :%i^nMonety : i%", Zmiana1, Zmiana2, monety);
}
else{
ShowSyncHudMsg(id, SyncHudObj2, "Zmiana 1 : %s^n Zmienna 2 :%i^nMonety : Wczytuje dane", Zmiana1, Zmiana2);
}



Wybaczcie, że nie ma bbcode ale znikły mi magiczne guziczki :)</p>
Użytkownik benio101 edytował ten post 15.01.2013 11:02
Dodanie znacznika SMA
Odpowiedz

  • +
  • -
speedkill - zdjęcie speedkill 15.01.2013

Tak, powinno zadziałać ;)
Odpowiedz

  • +
  • -
sebul - zdjęcie sebul 15.01.2013

Skoro "cod_get_user_coins" zwraca liczbę całkowitą, to nie ma takiej opcji, żeby przez to bugował się hud... Więc szukaj problemu gdzie indziej, chociażby nie pisze się "i%" tylko "%i".
Odpowiedz