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

Wielkość tablic / Informacje w hud.


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

#1 WeBsteR

    Wszechwidzący

  • Użytkownik

Reputacja: 57
Pomocny

  • Postów:297
  • Imię:dawid
  • Lokalizacja:Rzeszów
Offline

Napisano 08.04.2015 13:24

Witam, stworzyłem sobie pewien hud na, którym nie powiem jest dość sporo rzeczy.

Mam 2 pytania, który z metod wyświetlania "informacji" na hud jest, że tak powiem najlepszy?

Obecnie używam:

formatex

Lecz nie wiem czy to dobra metoda, bo powyżej 10 osób już hud miga a od czasu do czasu hud w ogóle zniknie.

Czyżby użycie funkcji:

ShowSyncHudMsg

było by lepsze?

 

Kolejne z pytań to jak sprawdzić jaka wielkość tablicy jest w sam raz? Obecnie zrobiłem sobie pewną zmienną np.:

new zmienna[512];

I na moim przykładzie:

formatex(zmienna, 511, "Tutaj wszystkie moje informacje");

Gdy gra powiedzmy 5 osób wszystko jest ok, 0 errorów, lecz jak powiedzmy gra 15 osób to pojawiają się cały czas errory (i hud miga albo całkowicie się nie pokazuje/zanika):

[AMXX] Run time error 4: index out of bounds

Jak można by było to rozwiązać?


Użytkownik WeBsteR edytował ten post 08.04.2015 13:24

  • +
  • -
  • 0
Zabijaka Gryps to mój autorytet!

#2 Rivit

    Godlike

  • Support Team

Reputacja: 1 319
Godlike

  • Postów:4 380
Offline

Napisano 08.04.2015 14:51

Nie podałeś gdzie występuje błąd... Podaj linijkę w której jest błąd.


  • +
  • -
  • 1

#3 WeBsteR

    Wszechwidzący

  • Autor tematu
  • Użytkownik

Reputacja: 57
Pomocny

  • Postów:297
  • Imię:dawid
  • Lokalizacja:Rzeszów
Offline

Napisano 08.04.2015 14:59

Ciągły error jaki w tym pluginie wyskakuje to:

[AMXX] Run time error 4: index out of bounds

W tej linijce którą podałem:

formatex(zmienna, 511, "Tutaj wszystkie moje informacje");

Tablica:

new zmienna[512];

Hmm może to dlatego, że ten hud wysyłam do wszystkich graczy po kolei a nie 1 do wszystkich, lecz chciałbym aby pozostało, że hud wyświetla się do każdego po kolei.


  • +
  • -
  • 0
Zabijaka Gryps to mój autorytet!

#4 Rivit

    Godlike

  • Support Team

Reputacja: 1 319
Godlike

  • Postów:4 380
Offline

Napisano 08.04.2015 15:11

Według mnie problem leży w parametrach do stringa w formatex... Masz tam jakieś zmienne tablicowe, do których podajesz index? Raczej tam bym szukał.


  • +
  • -
  • 1

#5 DarkGL

    Nie oddam ciasteczka !

  • Administrator

Reputacja: 6 553
Godlike

  • Postów:11 976
  • GG:
  • Steam:steam
  • Imię:Rafał
  • Lokalizacja:Warszawa
Offline

Napisano 08.04.2015 15:13

podaj pełny kod..


  • +
  • -
  • 0

#6 WeBsteR

    Wszechwidzący

  • Autor tematu
  • Użytkownik

Reputacja: 57
Pomocny

  • Postów:297
  • Imię:dawid
  • Lokalizacja:Rzeszów
Offline

Napisano 08.04.2015 15:19

Na przykład mam taki kod:

public task_server()
{
    if(end_usun)
    return;
    
    #if defined DEBUG
    log_to_file("jail_api_jailbreak.log", "task_server pre");
    #endif
    for(new id=1; id<=MAX; id++)
    {
        if(!is_user_alive(id) || !is_user_connected(id))
        continue;
        
        if(gTeam[id] == 1)
        {
            if(dane_dnia[6])
            {
                new PlayerPos[3];
                get_user_origin(id, PlayerPos);
                if(PlayerPos[0] == LastPosition[id][0] && PlayerPos[1] == LastPosition[id][1])
                {
                    TimeAfk[id]++;    
                    if(TimeAfk[id] == 15)
                    {
                        ColorChat(id, TEAM_COLOR, "^x04[PrisonBreak] ^x01Przestan Kampic!");
                        ExecuteHam(Ham_TakeDamage, id, 0, 0, 5.0, (1<<14));
                    }
                    else if(TimeAfk[id] == 18)
                    {
                        ColorChat(id, TEAM_COLOR, "^x04[PrisonBreak] ^x01Przestan Kampic!");
                        ExecuteHam(Ham_TakeDamage, id, 0, 0, 10.0, (1<<14));
                    }
                    else if(TimeAfk[id] >= 20)
                    {
                        ColorChat(id, TEAM_COLOR, "^x04[PrisonBreak] ^x01Przestan Kampic!");
                        ExecuteHam(Ham_TakeDamage, id, 0, 0, 20.0, (1<<14));
                    }
                }
                else
                TimeAfk[id] = 0;
                
                LastPosition[id][0] = PlayerPos[0];
                LastPosition[id][1] = PlayerPos[1];
            }
            
            if(czas_bronie && dane_dnia[0] == 1 && ostatni_wiezien == id && !pokaz_raz)
            {
                new iRet;
                usun_ustawienia_dzien();
                
                ExecuteForward(fLastPrisonerShowWish, iRet, id);
                
                obsluga_dala = true;
                pokaz_raz = true;
            }
        }
        else if(gTeam[id] == 2)
        {
            PokazStatusText(id, "Wiezniowie: %i zywi | %i Wszyscy", ilosc_graczy[ZYWI], ilosc_graczy[WSZYSCY]);
            if(czas_bronie && !dane_dnia[0] && ostatni_wiezien && prowadzacy == id && !pokaz_raz)
            {
                menu_display(id, ProwadzacyMenu);
                
                usun_ustawienia_dzien();
                pokaz_raz = true;
            }
        }
    }
    
    //set_hudmessage(0, 255, 0, 0.6, 0.1, 0, 0.01, 1.0);
    //ShowSyncHudMsg(0, SyncHudObj2, "Dzien %i - %s", jail_day, dni_tygodnia[jail_day%7]);
    
    new szDay[512];
    formatex(szDay, 511, "Dzien %i - %s^n I TUTAJ DAJE WIECEJ INFORMACJI", jail_day, dni_tygodnia[jail_day%7]);
    set_hudmessage(0, 255, 0, 0.01, 0.18, 0, 0.01, 1.0);
    if(prowadzacy && !szInfo[0])
    {    
        set_hudmessage(0, 255, 0, 0.01, 0.18, 0, 0.01, 1.0);
        format(szDay, 511, "%s%s jest prowadzacym straznikiem.", szDay, nazwa_gracza[prowadzacy]);
    }
    else if(szInfo[0])
    {
        set_hudmessage(255, 0, 0, 0.01, 0.18, 0, 0.01, 1.0);
        format(szDay, 511, "%s%s", szDay, szInfo);
    }
    ShowSyncHudMsg(0, SyncHudObj3, szDay);
    
    if(szPoszukiwani[0] && !szInfoPosz[0])
    {
        set_hudmessage(255, 85, 85, 0.01, 0.4, 0, 0.01, 1.0);
        ShowSyncHudMsg(0, SyncHudObj4, "Poszukiwani:%s", szPoszukiwani);
    }
    else if(szInfoPosz[0])
    {
        set_hudmessage(0, 255, 0, 0.01, 0.22, 0, 0.01, 1.0);
        ShowSyncHudMsg(0, SyncHudObj4, szInfoPosz);
    }
    
    #if defined DEBUG
    log_to_file("jail_api_jailbreak.log", "task_server post");
    #endif
}

Tylko mam ustawione, że hud jest do wszystkich graczy po kolei (id), a nie do wszystkich razem (0).

Błąd wywala w linijce:

formatex(szDay, 511, "Dzien %i - %s^n I TUTAJ DAJE WIECEJ INFORMACJI", jail_day, dni_tygodnia[jail_day%7]);

Użytkownik WeBsteR edytował ten post 08.04.2015 15:21

  • +
  • -
  • 0
Zabijaka Gryps to mój autorytet!

#7 Rivit

    Godlike

  • Support Team

Reputacja: 1 319
Godlike

  • Postów:4 380
Offline

Napisano 08.04.2015 15:33

Według mnie problem leży w parametrach do stringa w formatex... Masz tam jakieś zmienne tablicowe, do których podajesz index? Raczej tam bym szukał.

 

 

Wątpie żeby wynik działania jail_day%7 przekroczył zakres tablicy, na moje oko coś w tym co dodałeś i wywala błąd...


  • +
  • -
  • 1

#8 WeBsteR

    Wszechwidzący

  • Autor tematu
  • Użytkownik

Reputacja: 57
Pomocny

  • Postów:297
  • Imię:dawid
  • Lokalizacja:Rzeszów
Offline

Napisano 08.04.2015 15:38

Do tego kodu @up mam jeszcze dodane:

    new szDay[512];
    new Time[9];
    get_time("%H:%M:%S",Time,8);
    new szMapName[32];
    get_mapname(szMapName, 31);
    new nextmap[32];
    get_cvar_string("amx_nextmap",nextmap,31);
    new timeleft = get_timeleft();

Czyżby to zmieniało postać rzeczy?


  • +
  • -
  • 0
Zabijaka Gryps to mój autorytet!

#9 Wielkie Jol

    REPREZENTUJE SIEBIE I CAŁĄ GALAKTYKĘ

  • Support Team

Reputacja: 683
Wszechmogący

  • Postów:1 258
  • GG:
  • Lokalizacja:AMXX
Offline

Napisano 09.04.2015 06:30

Mi się wydaje, że powinieneś sprawdzić typ dnia oraz to, czy jest już prowadzący czyli:

if(!prowadzacy && !szInfo[0])

 

I nie rezerwuj dla każdej zmiennej 511 znaków, bo to jest trochę dużo.


  • +
  • -
  • -1

"Żaden etyczny inżynier oprogramowania nie zgodzi się napisać procedury zniszczBagdad. Jego poczucie etyki domaga się, aby napisał procedurę zniszczMiasto, a Bagdad przekazał jako parametr" - Nathaniel Borenstein.


#10 WeBsteR

    Wszechwidzący

  • Autor tematu
  • Użytkownik

Reputacja: 57
Pomocny

  • Postów:297
  • Imię:dawid
  • Lokalizacja:Rzeszów
Offline

Napisano 09.04.2015 13:30

Wytłumacz mi ktoś na chłopski, co oznacza ten error:

[AMXX] Run time error 4: index out of bounds

Czyżby, plugin próbował pobrać wartość tablicy powyżej jej rozmiaru ?


  • +
  • -
  • 0
Zabijaka Gryps to mój autorytet!

#11 oeN.

    Wszechwidzący

  • Użytkownik

Reputacja: 95
Zaawansowany

  • Postów:294
  • Lokalizacja:Dom
Offline

Napisano 09.04.2015 14:30

Dokładnie, to tak jakbyś dał zmienną o indeksie 22 dla 32 graczy. No nie da rady.


  • +
  • -
  • 0

#12 Wielkie Jol

    REPREZENTUJE SIEBIE I CAŁĄ GALAKTYKĘ

  • Support Team

Reputacja: 683
Wszechmogący

  • Postów:1 258
  • GG:
  • Lokalizacja:AMXX
Offline

Napisano 09.04.2015 14:36

Wytłumacz mi ktoś na chłopski, co oznacza ten error:

[AMXX] Run time error 4: index out of bounds

Czyżby, plugin próbował pobrać wartość tablicy powyżej jej rozmiaru ?

Tak, ale chyba nie dodałeś 511+ znaków do zmiennej?


  • +
  • -
  • 2

"Żaden etyczny inżynier oprogramowania nie zgodzi się napisać procedury zniszczBagdad. Jego poczucie etyki domaga się, aby napisał procedurę zniszczMiasto, a Bagdad przekazał jako parametr" - Nathaniel Borenstein.


#13 WeBsteR

    Wszechwidzący

  • Autor tematu
  • Użytkownik

Reputacja: 57
Pomocny

  • Postów:297
  • Imię:dawid
  • Lokalizacja:Rzeszów
Offline

Napisano 09.04.2015 15:32

No, nie dodałem. Ale jak dałbym zmienna np. 64 czy 256 to w niektórych miejscach ucinało mi tekst, więc myślałem, że jak dam więcej to będzie lepiej, bo przynajmniej nic nie ucina ;)

Ale chyba to nie na takiej zasadzie działa, więc skąd mam wiedzieć jaką dać wielkość tablicy, aby była w sam raz na dany tekst?


  • +
  • -
  • 0
Zabijaka Gryps to mój autorytet!

#14 Rivit

    Godlike

  • Support Team

Reputacja: 1 319
Godlike

  • Postów:4 380
Offline

Napisano 09.04.2015 16:18

formatex ucina tekst. Na moje oko coś nie tak z parametrami w formatex, tam może wystąpić przekroczenie zakresu.


  • +
  • -
  • 1

#15 oeN.

    Wszechwidzący

  • Użytkownik

Reputacja: 95
Zaawansowany

  • Postów:294
  • Lokalizacja:Dom
Offline

Napisano 09.04.2015 20:23

Pokaż zmienną jail_day (możliwe że tutaj jest błąd).


  • +
  • -
  • 0




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

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