Skocz do zawartości

  • Zaloguj korzystając z Facebooka Zaloguj korzystając z Twittera Zaloguj przez Steam Zaloguj poprzez Google      Logowanie »   
  • Rejestracja

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
 

Zdjęcie

[KOSZ] problem z set_user_gravity oraz z float.inc::operator


  • Zamknięty Temat jest zamknięty
2 odpowiedzi w tym temacie

#1 pro100wHS

    Pomocny

  • Użytkownik

Reputacja: 13
Początkujący

  • Postów:70
  • GG:
  • Lokalizacja:Ziemia
Offline

Napisano 07.01.2015 13:51


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  6 Ilość pobrań
  QTM_CodMod.amxx


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

  • +
  • -
  • 0

b_350_20_FFFFFF_ACBB53_0A0F2E_000000.png

Jeżeli masz do mnie jakąś sprawę to napisz od razu o co ci chodzi.

Wiadomości typu "pomożesz?" bez wyjaśnienia sprawy będę od razu usuwał


#2 Ossal

    Wszechwidzący

  • Użytkownik

Reputacja: 20
Życzliwy

  • Postów:263
  • GG:
  • Lokalizacja:Warszawa
Offline

Napisano 07.01.2015 20:20

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 :)
  • +
  • -
  • 0

#3 CheQ

    Nie wiem, nie znam się, nie orientuję się, zarobiony jestem.

  • Junior Admin

Reputacja: 1984
Godlike

  • Postów:5534
  • Imię:Adaś
  • Lokalizacja:Glinianka
Offline

Napisano 08.01.2015 06:22

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.
  • +
  • -
  • 0

b_560_95_1.png





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

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