[KOSZ] problem z set_user_gravity oraz z f...
pro100wHS
07.01.2015
L 01/07/2015 - 03:52:35: Start of error session. L 01/07/2015 - 03:52:35: Info (map "de_dust2x2") (file "addons/amxmodx/logs/error_20150107.log") L 01/07/2015 - 03:52:56: [FUN] Invalid player 10 L 01/07/2015 - 03:52:56: [AMXX] Displaying debug trace (plugin "QTM_CodMod.amxx") L 01/07/2015 - 03:52:56: [AMXX] Run time error 10: native error (native "set_user_gravity") L 01/07/2015 - 03:52:56: [AMXX] [0] float.inc::operator*(Float:,_:) (line 108) L 01/07/2015 - 03:52:56: [AMXX] [1] QTM_CodMod.sma::Odrodzenie (line 345)
Zacznę od funkcji publicznej Odrodzenie.
public Odrodzenie(id) { set_user_gravity(id, 1.0-(grawitacja_gracza[id]*0.0004411764));//ta liczba po przecinku to wspolczynnik zmiany grawitacji if(!task_exists(id+ZADANIE_POKAZ_INFORMACJE)) set_task(0.1, "PokazInformacje", id+ZADANIE_POKAZ_INFORMACJE, _, _, "b"); if(nowa_klasa_gracza[id]) UstawNowaKlase(id); if(!klasa_gracza[id]) { WybierzKlase(id); return PLUGIN_CONTINUE; } DajBronie(id); ZastosujAtrybuty(id); if(poziom_gracza[id] < min_lvl) { client_print(id,print_chat,"[Cs-wakacje.p] Wykrylem duze problemy z balansem lvli na serwerze"); client_print(id,print_chat,"[Cs-wakacje.p] W ramach tego dostales %i LVL na start",min_lvl); UstawDoswiadczenie(id,PobierzDoswiadczeniePoziomu(min_lvl)+1); poziom_gracza[id] = min_lvl; SprawdzPoziom(id); } if(punkty_gracza[id] > 0) PrzydzielPunkty(id); return PLUGIN_CONTINUE; }
Jedyny natyw z biblioteki fun to jest właśnie set_user_gravity. Teraz(pisząc ten temat) wpadłem na zastosowanie warunku:
if(is_user_alive(id) && !is_user_bot(id) && !is_user_hltv(id)) { set_user_gravity(id, 1.0-(grawitacja_gracza[id]*0.0004411764));//ta liczba po przecinku to wspolczynnik zmiany grawitacji }
Chyba powinno to rozwiązać problem z invalid player, tak?
Przejdźmy dalej- co dokładnie oznacza ten błąd:
float.inc::operator*(Float:,_:)
Wywala go w linii :
new limitzdrowie = 500;
Nie wiem co za błąd tu widzi... Czy może jednak to jest problem związany z mnożeniem przez 0 w set_user_gravity? Jeżeli tak to można by to naprawić takim kodem:
if(is_user_alive(id) && !is_user_bot(id) && !is_user_hltv(id)) { set_user_gravity(id, 1.0-(float(grawitacja_gracza[id]+1)*0.0004411764));//ta liczba po przecinku to wspolczynnik zmiany grawitacji }
Tu najbardziej mnie będzie dręczyła niedokładność w liczbie zmiennoprzecinkowej. ..
Nie chcę eksperymentować tego, co wyżej napisałem bezpośrednio na serwerze, żeby czegoś więcej nie schrzanić.
Załączam kod całego pluginu.
Z góry dzięki za pomoc
QTM_CodMod.sma 48,79 KB
33 Ilość pobrań
Użytkownik pro100wHS edytował ten post 07.01.2015 13:55
Ossal
07.01.2015
co do spawnu, zawsze trzeba sprawdzać czy gracz jest żywy, albowiem istnieje jeden przypadek kiedy gracz nie będzie żywy w chwili spawnu, dokładniej jest to wtedy kiedy gracz wchodzi na serwer i w przeciągu kilku sekund nie wejdzie do gry to się "spawnuje" według amxa, ale jest martwy, to ten moment kiedy dodaje Ci kase przed przyłączeniem się do jakiejś drużyny. Jak da się grawitacje, broń czy coś innego w tym przypadku będzie sypało błędami
if(is_user_alive(id) && !is_user_bot(id) && !is_user_hltv(id))
Nie musisz sprawdzać czy jest to hltv, bo hltv nie może być żywe więc jest wykluczane w warunku 1
Czy może jednak to jest problem związany z mnożeniem przez 0 w set_user_gravity?
Od kiedy nie wolno mnożyć przez 0? Po prostu zawsze wskoczy 0, a to na pewno nie fajna sytuacja
![:P](https://amxx.pl/public/style_emoticons/default/tongue.png)
A co do float to nie używam go za często, ale jak raz chciałem użyć to przy tworzeniu zmiennej wywalało błąd przy napisaniu 'float', a przy napisaniu 'Float' problemów nie było, nie wiem czemu, znie znam sie na tym
![:D](https://amxx.pl/public/style_emoticons/default/biggrin.png)
![:P](https://amxx.pl/public/style_emoticons/default/tongue.png)
Liczę, że coś pomogłem
![:)](https://amxx.pl/public/style_emoticons/default/smile.png)
dasiek
08.01.2015
Napisz ponownie temat nazywając go tak, aby każdy wiedział o co chodzi.
Jednoznacznie określ problematykę tematu, wyróżniając go spośród reszty.
Nie dodawaj zbędnych informacji, znaków, ani emotikon w nazwie tematu.
Ten temat w ciągu 24 godzin zostanie przeniesiony do kosza.