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

[ROZWIĄZANE] is_user_connected(id) - Koniecznie pierwszym warunkiem?


Najlepsza odpowiedź GwynBleidD, 31.10.2013 11:51

if(0<id<33 && ma_perk[id] && is_user_connected(id))

 

Pomysł dobry, ale powinno to wyglądać tak:

if(0<id && id<33 && ma_perk[id] && is_user_connected(id))

 

w praktyce opłaca się sprawdzać tylko 2 warunek, mniej niż zero być nie może, a samo zero jeszcze się w tablicy mieści.

Przejdź do postu


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

#1 Lacostii

    Profesjonalista

  • Użytkownik

Reputacja: 40
Pomocny

  • Postów:172
  • Lokalizacja:Poland
Offline

Napisano 29.10.2013 10:08

Witam,

mam taki problem, bo chcę stworzyć jak najlepiej działający plugin oszczędzający zasoby maszyny.

Jak wiadomo lepiej wpierw dawać w warunkowych krokach te, które nie wykonują zapytań do silnika HLDS, dlatego utworzyłem takie zapytanie,

(ma_perk[id] = true/false jest określane w innych funkacjach, a ta tablica jest globalną)

if(ma_perk[id] && is_user_connected(id))
{

W takim utworzeniu warunków wszystko działa, ale otrzymuję error logi:

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

Domyślam się, że id, które otrzymuje ma_perk[33] wykracza poza zdefiniowane czyli jest mniejsze od zera albo większe od 32, tym zawsze zajmowało się is_user_connected(id), ale z racji że ono pyta HLDS nie chce umieszaczać go na pierwszym miejscu. Więc czy dodanie warunku jeszcze jednego sprawdzającego czy id jest w normie załatwiło by sprawę i sprawiło, że plugin by działał oszczędnej dla maszyny? Wyglądałoby to tak:

if(0<id<33 && ma_perk[id] && is_user_connected(id))
{

Proszę o odpowiedź tylko osoby co mają pojęcie o tym.


  • +
  • -
  • 0

Zapraszam na forum Classic-Zone.pl . ;)


#2 DarkGL

    Nie oddam ciasteczka !

  • Administrator

Reputacja: 6 569
Godlike

  • Postów:12 019
  • GG:
  • Steam:steam
  • Imię:Rafał
  • Lokalizacja:Warszawa
Offline

Napisano 29.10.2013 10:27

a kiedy ustawiasz ma_perk i kiedy wywoływane są forwardy w których ustawiasz wartość ma_perk[ identyfikator ] ( domyślam się że to cod )


  • +
  • -
  • 0

#3 GwynBleidD

    Godlike

  • Przyjaciel

Reputacja: 1 869
Godlike

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

Napisano 29.10.2013 15:49

Może inaczej, gdzie podany przez Ciebie warunek siedzi? W jakiej funkcji/handlerze/evencie?


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


#4 Lacostii

    Profesjonalista

  • Autor tematu
  • Użytkownik

Reputacja: 40
Pomocny

  • Postów:172
  • Lokalizacja:Poland
Offline

Napisano 29.10.2013 18:22

Przykładowy plugin,w którym zastosowałem taką kolejność warunków, a otrzymuję error logi.

Spoiler

Również problem jest przy evencie:

register_event("Damage", "Damage", "b", "2!=0");	

I moje pytania brzmią czy ten dodatkowy warunek z przodu załatwi problem oraz czy jest w ogóle sens takiego kombinowania? Bo jak zauważyliście tworzę pluginy na COD'a gdzie będzie razem kilkadziesiąt perków i klas, dlatego takie detale się dla mnie liczą, a za cel postawiłem sobie jak najlepsze działanie takich dodatków.


  • +
  • -
  • 0

Zapraszam na forum Classic-Zone.pl . ;)


#5 Jak się nazwać

    Wszechmogący

  • Power User

Reputacja: 169
Profesjonalista

  • Postów:617
  • Imię:a
  • Lokalizacja:a
Offline

Napisano 29.10.2013 18:41

Możesz też sam utworzyć system sprawdzania czy gracz jest połączony, żywy itp za pomocą forwardów csa i registerham


  • +
  • -
  • 0
Pisze na zamówienie statystyki pod nvault. GG: 15600964

#6 sebacs2

    Wszechwidzący

  • Użytkownik

Reputacja: 6
Nowy

  • Postów:244
  • Lokalizacja:nie wiem
Offline

Napisano 29.10.2013 18:53

Mówiąc inaczej, warunek czy gracz jest podłączony (is_user_connected) daj na sam początek funkcji TakeDamage


  • +
  • -
  • 0

;P Zapraszam na sieć serwerów Cs-KoRea.pl ^D^

Serwer [FFA+BF2] 31.186.83.100:27041 Serwer [Cod] 31.186.83.100:27046


#7 Lacostii

    Profesjonalista

  • Autor tematu
  • Użytkownik

Reputacja: 40
Pomocny

  • Postów:172
  • Lokalizacja:Poland
Offline

Napisano 29.10.2013 23:08

Możesz też sam utworzyć system sprawdzania czy gracz jest połączony, żywy itp za pomocą forwardów csa i registerham

Nie wiem czy dobrze zrozumiałem, masz na myśli osobny plugin co będzie już z góry odrzucał wszystkie sygnały dla wybranych eventów zanim one trafią do reszty pluginów, gdy gracz nie będzie podłączony/żywy? Jest to rozwiązanie, ale wtedy rodzi się u mnie kolejne pytanie:

 

Gdy mam X pluginów wywołujących funkcje od "Ham_TakeDamage" w tym samym momencie i każda funkcja zaczyna się od warunku is_user_connected(id) to czy to zapytanie zostanie wykonane X razy, czy może silnik zdaje sobie sprawę, że otrzyma X tych samych zapytań i załatwia to w jednej odpowiedzi?

 

 

Mówiąc inaczej, warunek czy gracz jest podłączony (is_user_connected) daj na sam początek funkcji TakeDamage

Nie mów mi proszę szablonowych zwrotów, w tym temacie chcę właśnie spróbować uniknąć tego zapytania na początku.

 

Coś nie możecie mi chyba przewidzieć co się stanie gdy dam taki kod, dlatego przetestuję go i dam odpowiedź:

if(0<id<33 && ma_perk[id] && is_user_connected(id))

Jednak oczekiwałbym odpowiedzi jeśli by nie było już error logów czy tak ułożone warunki byłyby lepsze niż standardowe:

(zaznaczam, że perków jest kilkadziesiąt, więc szansa, że "ma_perk[id] = true" nie jest duża.)

if(is_user_connected(id) && ma_perk[id])

?

 

Dziękuję za zainteresowanie tematem ;).


Użytkownik Lacostii edytował ten post 29.10.2013 23:18

  • +
  • -
  • 0

Zapraszam na forum Classic-Zone.pl . ;)


#8 Lacostii

    Profesjonalista

  • Autor tematu
  • Użytkownik

Reputacja: 40
Pomocny

  • Postów:172
  • Lokalizacja:Poland
Offline

Napisano 30.10.2013 22:46

Minął prawie cały dzień na zaludnionym serwerze i nie ma error logów. Mogę się cieszyć z wynalezienia lepszego ułożenia warunków pod kątem oszczędności zasobów serwera czy jednak i tak stary sposób jest lepszy, ktoś jest to w stanie ocenić?


  • +
  • -
  • 0

Zapraszam na forum Classic-Zone.pl . ;)


#9 GwynBleidD

    Godlike

  • Przyjaciel

Reputacja: 1 869
Godlike

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

Napisano 31.10.2013 11:51   Najlepsza odpowiedź

if(0<id<33 && ma_perk[id] && is_user_connected(id))

 

Pomysł dobry, ale powinno to wyglądać tak:

if(0<id && id<33 && ma_perk[id] && is_user_connected(id))

 

w praktyce opłaca się sprawdzać tylko 2 warunek, mniej niż zero być nie może, a samo zero jeszcze się w tablicy mieści.


  • +
  • -
  • 1

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


#10 GT Team

    Ten lepszy xD

  • Zbanowany

Reputacja: 321
Wszechpomocny

  • Postów:1 435
  • GG:
  • Imię:Tomasz i Grzegorz
  • Lokalizacja:Wojkowice
Offline

Napisano 31.10.2013 15:30

Czemu zamiast tego:
if(0 < id <33)
lepiej jest, żeby było tak:
if(0 < id && id < 33 )
To chyba to samo? I kod jest dłuższy?

Nowa wersja Tower Defense 0.2 Alpha | Inne Mody -> Nowości

 


#11 GwynBleidD

    Godlike

  • Przyjaciel

Reputacja: 1 869
Godlike

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

Napisano 01.11.2013 14:56

Sorki, nawyk z innych języków programowania, w których taki zapis był niepoprawny. Zwracam honor.


  • +
  • -
  • 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: 1

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