←  Problemy

AMXX.pl: Support AMX Mod X i SourceMod

»

[KOSZ] problem z set_user_gravity oraz z f...

Zablokowany

  • +
  • -
pro100wHS - zdjęcie 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 :)

 

Załączony plik  QTM_CodMod.sma   48,79 KB   33 Ilość pobrań


Użytkownik pro100wHS edytował ten post 07.01.2015 13:55
Odpowiedz

  • +
  • -
Ossal - zdjęcie 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

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 Nie wiem czy pomoc to jakaś jest, ale dzielę się doświadczeniem :P
Liczę, że coś pomogłem :)
Odpowiedz

  • +
  • -
dasiek - zdjęcie dasiek 08.01.2015

Nazywaj tematy zgodnie z ich treścią.
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.
Odpowiedz
Zablokowany