Skocz do zawartości

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

Wywala error przy obliczaniu zmiennej float


  • Nie możesz napisać tematu
  • Zaloguj się, aby dodać odpowiedź
8 odpowiedzi w tym temacie

#1 Sniper Elite

    Master

  • Power User

Reputacja: 176
Profesjonalista

  • Postów:981
  • GG:
  • Imię:Konrad
  • Lokalizacja:Skryptolandia
Offline

Napisano 26.02.2014 12:17

Witam. Ostatnio mam problem z lagami i żeby napisać do hostingu muszę wyeliminować wszystkie error logi. Mam taki oto problem:

        {
            xp_now = float(doswiadczenie_gracza[id])-float(doswiadczenie_poziomu[poziom_gracza[id]-1])
            xp_need = float(doswiadczenie_poziomu[poziom_gracza[id]])-float(doswiadczenie_poziomu[poziom_gracza[id]+1])
            perc = xp_now*100.0/xp_need
        }

Dokładnie chodzi o linijkę:

xp_now = float(doswiadczenie_gracza[id])-float(doswiadczenie_poziomu[poziom_gracza[id]-1])

Zmienna jest zdefiniowana jako float:

new Float:xp_now

A error jaki pokazuje się w logach:

L 02/26/2014 - 10:35:23: [AMXX] Run time error 4: index out of bounds
L 02/26/2014 - 10:35:23: [AMXX]    [0] QTMCodMod.sma::PokazInformacje (line 9796)
L 02/26/2014 - 10:35:23: [AMXX] Displaying debug trace (plugin "QTMCodMod.amxx")

Próbowałem go wyeliminować sam, ale ja tu błędu nie widzę.

 

Dzięki za pomoc :)


  • +
  • -
  • 0

Kontakt:

Steam: CSnajper

GG: 4394855

 

Na steam i GG pomagam wyłącznie odpłatnie.


#2 kyriuch

    Zaawansowany

  • Użytkownik

Reputacja: -6
Nowy

  • Postów:82
  • GG:
  • Imię:Tomek
  • Lokalizacja:Bydgoszcz
Offline

Napisano 26.02.2014 18:28

problemem nie jest to, ze jak poziom_gracza jest 0, to odwolujesz sie do -1 elementu tablicy?
  • +
  • -
  • 1

#3 Sniper Elite

    Master

  • Autor tematu
  • Power User

Reputacja: 176
Profesjonalista

  • Postów:981
  • GG:
  • Imię:Konrad
  • Lokalizacja:Skryptolandia
Offline

Napisano 26.02.2014 19:40

Nie, zmienna od poziomu ma na start wartość 1, a jeżeli jest równa 1 odpalany jest inny warunek.

new poziom_gracza[33] = 1;

  • +
  • -
  • 0

Kontakt:

Steam: CSnajper

GG: 4394855

 

Na steam i GG pomagam wyłącznie odpłatnie.


#4 kyriuch

    Zaawansowany

  • Użytkownik

Reputacja: -6
Nowy

  • Postów:82
  • GG:
  • Imię:Tomek
  • Lokalizacja:Bydgoszcz
Offline

Napisano 26.02.2014 20:03

nie wiem, czy nie podales za malo kodu, ciezko mi stwierdzic... mam dwie hipotezy
- cos nie tak z id, jesli to jest w petli,
- piszac kiedys zapis sql z floatami zauwazylem, ze dosc dziwnie one dzialaja w Pawnie
rozumiem, ze dwie pozostale zmienne to integery? probowales zamienic je na floaty? i po prostu inaczej formatowac przy wyswietlaniu?
  • +
  • -
  • 1

#5 Sniper Elite

    Master

  • Autor tematu
  • Power User

Reputacja: 176
Profesjonalista

  • Postów:981
  • GG:
  • Imię:Konrad
  • Lokalizacja:Skryptolandia
Offline

Napisano 26.02.2014 21:01

Pętli nie ma i to zapis nvault. Cała funkcja wygląda tak:

public PokazInformacje(id)
{
        id -= ZADANIE_POKAZ_INFORMACJE;
        
        set_task(0.1, "PokazInformacje", id+ZADANIE_POKAZ_INFORMACJE);

        if(!is_valid_ent(id)){
                            return PLUGIN_CONTINUE;
        }
        new Float:xp_now
        new Float:xp_need
        new Float:perc
        
        if(!is_user_alive(id))
        {
            new target = entity_get_int(id, EV_INT_iuser2);
            
            if(!target)
                return PLUGIN_CONTINUE;
                
            if (poziom_gracza[target] == 1)
            {
                xp_now = float(doswiadczenie_gracza[target])
                xp_need = float(doswiadczenie_poziomu[poziom_gracza[target]])
                perc = xp_now*100.0/xp_need
            }
            else
            {
                xp_now = float(doswiadczenie_gracza[target])-float(doswiadczenie_poziomu[poziom_gracza[target]]-1)
                xp_need = float(doswiadczenie_poziomu[poziom_gracza[target]])-float(doswiadczenie_poziomu[poziom_gracza[target]]+1)
                perc = xp_now*100.0/xp_need
            }
            
            new ileMa = doswiadczenie_gracza[target],ilePotrzeba = doswiadczenie_poziomu[poziom_gracza[target]],ilePotrzebaBylo = doswiadczenie_poziomu[poziom_gracza[target]-1]
            new Float:fProcent = 0.0;
            fProcent = (float((ileMa - ilePotrzebaBylo)) / float((ilePotrzeba - ilePotrzebaBylo))) * 100.0;

            set_hudmessage(0, 255, 0, 0.02, 0.23, 0, 0.0, 0.3, 0.0, 0.0);
            ShowSyncHudMsg(id, SyncHudObj, "Klasa : %s^nPoziom : %i (%0.1f%%)^nItem : %s^nZdrowie : %i^nWykonanych Misji : %i^nZdrowie : %i^nWytrzymalosc : %i^nKondycja : %i^nInteligencja : %i^nGrawitacja : %i^nNiewidzialnosc : %i^nCelne Oko : %i",
            nazwy_klas[klasa_gracza[target]], poziom_gracza[target], fProcent, nazwy_przedmiotow[item_gracza[target]], get_user_health(target), ile_wykonano[target], zdrowie_gracza[target], wytrzymalosc_gracza[target], kondycja_gracza[target], inteligencja_gracza[target], grawitacja_gracza[target], niewidzialnosc_gracza[target], celneoko_gracza[target]);
            return PLUGIN_CONTINUE;
        }
        //Calculate percentage of xp required to level
        if (poziom_gracza[id] == 1)
        {
            xp_now = float(doswiadczenie_gracza[id])
            xp_need = float(doswiadczenie_poziomu[poziom_gracza[id]])
            perc = xp_now*100.0/xp_need
        }
        else
        {
            xp_now = float(doswiadczenie_gracza[id])-float(doswiadczenie_poziomu[poziom_gracza[id]-1])
            xp_need = float(doswiadczenie_poziomu[poziom_gracza[id]])-float(doswiadczenie_poziomu[poziom_gracza[id]+1])
            perc = xp_now*100.0/xp_need
        }
        
        new ileMa = doswiadczenie_gracza[id],ilePotrzeba = doswiadczenie_poziomu[poziom_gracza[id]],ilePotrzebaBylo = doswiadczenie_poziomu[poziom_gracza[id]-1]
        new Float:fProcent = 0.0;
        fProcent = (float((ileMa - ilePotrzebaBylo)) / float((ilePotrzeba - ilePotrzebaBylo))) * 100.0;
        
        set_hudmessage(0, 255, 0, 0.02, 0.23, 0, 0.0, 0.3, 0.0, 0.0);
        ShowSyncHudMsg(id, SyncHudObj, "[Klasa : %s]^n[Poziom : %i (%0.1f%%)]^n[Item : %s]^n[Wytrzymalosc itemu : %i]^n[Zdrowie : %i]^n[Zloto : %i]^n[Punkty Honoru : %i]^n[Odwiedz CsFifka.pl]", nazwy_klas[klasa_gracza[id]], poziom_gracza[id], fProcent, nazwy_przedmiotow[item_gracza[id]], wytrzymalosc_itemu[id], get_user_health(id), monety[id], honor[id]);
        return PLUGIN_CONTINUE;
}

A tych 2 zmiennych nie będę zmieniał na float bo nie ma takiej potrzeby i nie wiem czy nvault nie zgłupieje.


  • +
  • -
  • 0

Kontakt:

Steam: CSnajper

GG: 4394855

 

Na steam i GG pomagam wyłącznie odpłatnie.


#6 kyriuch

    Zaawansowany

  • Użytkownik

Reputacja: -6
Nowy

  • Postów:82
  • GG:
  • Imię:Tomek
  • Lokalizacja:Bydgoszcz
Offline

Napisano 26.02.2014 21:07

i linia 9796 to
 

xp_now = float(doswiadczenie_gracza[id])-float(doswiadczenie_poziomu[poziom_gracza[id]-1])

tak?


  • +
  • -
  • 0

#7 GwynBleidD

    Godlike

  • Przyjaciel

Reputacja: 1 869
Godlike

  • Postów:3 066
  • Steam:steam
  • Lokalizacja:Przemyśl
Offline

Napisano 27.02.2014 18:34

Podaj rozmiar tablic: doswiadczenie_gracza, doswiadczenie_poziomu i poziom_gracza.


  • +
  • -
  • 0

NIE pomagam na PW. Nie trudź się, na zlecenia nie odpiszę... Od pomagania jest forum.
NIE zaglądam w tematy wysłane na PW. Jeśli są na forum to prędzej czy później je przeczytam. Jeśli mam co w nich odpisać, to odpiszę.
 
1988650.png?theme=dark


#8 Sniper Elite

    Master

  • Autor tematu
  • Power User

Reputacja: 176
Profesjonalista

  • Postów:981
  • GG:
  • Imię:Konrad
  • Lokalizacja:Skryptolandia
Offline

Napisano 27.02.2014 19:26

new doswiadczenie_gracza[33];
new const doswiadczenie_poziomu[] = { 0,50,125,225,340,510,765,1150,1500,1950,2550,3300,4000,4800,5800,7000,8500,9500,10500,11750,13000, //21
14300,15730,17300,19030,20900,23000,24000,25200,26400,27700,29000,30500,32000,33600,35300,37000,39000,41000,43000,45100,//41
47400,49800,52300,55000,57800,60700,63700,66900,70200,73700,77400,80000,82400,84900,87500,90000,92700,95500,98300,101000,//61
104000,107000,110000,113000,116000,120000,123000,126700,130000,134000,138000,142000,146000,150000,154000,158000,163000,168000,173000,178000,//81
183000,188000,194000,200000,206000,212000,218000,225000,232000,239000,246000,253000,261000,269000,277000,285000,294000,303000,500000,9999999/*101*/}
new poziom_gracza[33] = 1;

O to chodzi?


  • +
  • -
  • 0

Kontakt:

Steam: CSnajper

GG: 4394855

 

Na steam i GG pomagam wyłącznie odpłatnie.


#9 GwynBleidD

    Godlike

  • Przyjaciel

Reputacja: 1 869
Godlike

  • Postów:3 066
  • Steam:steam
  • Lokalizacja:Przemyśl
Offline

Napisano 27.02.2014 23:14

Ta, może być...

 

1. Sprawdzaj, czy zmienna target nie jest większa od 32, np zamiast tego:

            if(!target)

daj to:

            if(!target or target>32)

 

2. Tak samo sprawdzaj, czy id nie jest większe od 32, np zamiast tego:

        if(!is_valid_ent(id)){

daj:

        if(!id or !is_valid_ent(id) or id>32){

 

3. Upewnij się, że level gracza nie jest większy od 101


  • +
  • -
  • 0

NIE pomagam na PW. Nie trudź się, na zlecenia nie odpiszę... Od pomagania jest forum.
NIE zaglądam w tematy wysłane na PW. Jeśli są na forum to prędzej czy później je przeczytam. Jeśli mam co w nich odpisać, to odpiszę.
 
1988650.png?theme=dark





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

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