Jump to content
  • Chmurka
  • Boróweczka
  • Jabłuszko
  • Limonka
  • Czekoladka
  • Węgielek

Recommended Posts

jak dobrze wiemy każdy, kto nauczył się dobrze wykonywać jakąś czynność (czy to gra na gitarze, żonglowanie, czy gotowanie) musiał przejść przez długą drogę w celu osiągnięcia wysokiego poziomu. Nie inaczej sprawa ma się z programowaniem - każdy musi popełniać masę błędów, aby się na nich uczyć i wyciągać odpowiednie wnioski.

Okazuje się jednak, że są pewne rzeczy, które wydaje nam się, że robimy poprawnie, jednak rzeczywistość potrafi być zgoła inna - mowa tutaj o błędach, które popełniamy, mimo iż myślimy, że wszystko tworzone jest zgodnie ze sztuką.

 

W tym temacie chciałbym, abyśmy podzielili się swoimi spostrzeżeniami - jakie są najczęstsze błędy, które popełniamy, pisząc programy ?(oczywiście mowa o SourcePawnie ? ). Będzie to doskonałe źródło wiedzy i zarazem miejsce, do którego będzie można wracać za każdym razem, gdy napotkamy problem, lub będziemy chcieli eliminować po kolei popełniane błędy.

Wypadałoby, żebym od czegoś zaczął, więc oto błąd, który moim zdaniem pojawia się dość często:

Kiedy tworzymy operacje, które mają się wykonać za jakiś czas w przyszłości (np. Timer, naciśnięcie przycisku w menu przez gracza, callback z zapytania SQL), które wymagają przekazania identyfikatora gracza (dobrze nam znane "client"), zazwyczaj popełniamy w tym miejscu błąd, ponieważ podczas tego interwału player może wyjść z serwera, a na jego miejsce wskoczyć nowy... więcej o tym zjawisku (i jak z nim walczyć), mówię tutaj:

 

 

A jakie są Wasze spostrzeżenia? Sprawmy, aby to forum było wszystkim, czego potrzebuje osoba, która chce zacząć przygodę z SM!

 

Pozdrowionka!

  • Lubię to! 2
  • Kocham to! 1

Share this post


Link to post
Share on other sites

Najważniejszym błędem jest brak analizy swojego kodu tylko robienie na pośpiech, kopiowanie podobnego kodu ze swoich innych pluginów, lub z neta oraz jak napisałeś

3 godziny temu, MAGNET napisał:

(np. Timer, naciśnięcie przycisku w menu przez gracza, callback z zapytania SQL), które wymagają przekazania identyfikatora gracza (dobrze nam znane "client"), zazwyczaj popełniamy w tym miejscu błąd, ponieważ podczas tego interwału player może wyjść z serwera, a na jego miejsce wskoczyć nowy...

 

Wszystko to powoduje coś takiego jak:

  • Niepoprawne działanie pluginu.
  • Większość czasu spędzimy nad naprawą błędu a mogliśmy to napisać sami bez problemów z umysłem.
  • Możliwość SQL_Injection poprzez kopiowanie tej samej metody bazy danych do każdego pluginu.

 

Taka rada na przyszłość, nie liczy się szybkość zlecenia ale jego jakość, nigdy nie róbcie wszystkiego na szybko, analizujcie kod i spędźcie nad nim tyle czasu ile on wymaga.

  • Lubię to! 4

Share this post


Link to post
Share on other sites

Jednym z częstszych popełnianych błędów jest łączenie starej i nowej składni. Nie spotkałem się jeszcze z polskim objaśnieniem różnić pomiędzy starą, a nową składnią.

  • Lubię to! 2

Share this post


Link to post
Share on other sites

Indeksy. Za duży bufor, za mały bufor. Bufory powinny być odpowiednie, czyli minimum ile dana zmienna powinna być zmieścić, ani bita więcej bo w drastycznych przypadkach to i skutkuje skokami varu, a za mały bufor spowoduje błąd i niepoprawne działanie pluginu. 

  • Lubię to! 2

Share this post


Link to post
Share on other sites
1 godzinę temu, supertimor napisał:

Indeksy. Za duży bufor, za mały bufor. Bufory powinny być odpowiednie, czyli minimum ile dana zmienna powinna być zmieścić, ani bita więcej bo w drastycznych przypadkach to i skutkuje skokami varu, a za mały bufor spowoduje błąd i niepoprawne działanie pluginu. 

Umiejętność poprawnego doboru rozmiaru buffera wymaga lekkiej wprawy, ale nie jest to aż takie trudne. O ile konsekwencje zastosowanie zbyt małego "schowka" jest dość oczywiste, o tyle nie wiem co masz na myśli mówiąc o "skokach varu". Mógłbyś doprecyzować?

Share this post


Link to post
Share on other sites
Posted (edited)

Przy dużej ilości pluginów np w codmodzie, gdy pluginy używają dużo więcej pamięci niż potrzeba - wiadomo, pamięć ucieka, czego skutkiem mogą być skoki varu, o czym przekonałem się kiedyś na początku mojej przygody z kodowaniem, tj. gdy powstawał surf+klasy

/ Ofc dzisiaj problemu z tym nie mam, jednak wspominam o przeszłości dla potomnych ? 

Edited by supertimor

Share this post


Link to post
Share on other sites

1. Jak trzeba podać rozmiar tablicy, podają o jeden punkcik mniej, przykład:

char name[64];

Format(name, 63, "mójNick");

Gdzie prawidłowa forma to:

char name[64];

Format(name, 64, "mójNick");

A najlepszym nawykiem jest:

char name[64];

Format(name, sizeof(name), "mójNick");

2. Plugin niedostosowany do załadowania/wyładowania w trakcie gry. Warto w OnPluginStart wywoływać takie wydarzenia jak OnClientAuthorized, OnClientPutInServer itd., a w OnPluginEnd wywoływać OnClientDisconnect. Mega mało ludzi tak robi, bo nauczeni są restartować serwer przy wgraniu pluginu, źleeee. Co za tym idzie drugi błąd, ale pozwolę sobię go opisać, czyli pośrednie zapytanie SQL (threaded query) w OnPluginEnd. Niestety ale wtedy do zapisu może nie dojść.

3. Na siłę używanie bezpośrednich zapytań SQL (non-threaded query) bądź korzystanie ze SQLite, bo działają natychmiastowo. Niestety ale zapytania bezpośrednie potrafią nieźle zamulić serwer. Dopuszcza się używanie ich wtedy, kiedy np. dane zapisywane są przy wyładowaniu pluginu o czym napisałem wyżej, jednak kiedy jest okazja warto zawsze korzystać z "SQL_TQuery". SQLite jest dobre o ile jest tam dość mało danych, nie opłaca się używać SQLite kiedy dane są przypisane do np. graczy, wtedy przepełnienie bazy następuje dosyć szybko, a co za tym idzie serwer doznaje pojedynczych ścinek które trwają nawet po 0.5s, czyli jest to bardzo dokuczliwe.

 

  • Lubię to! 2
  • Dobry pomysł! 1
  • Kocham to! 1

Share this post


Link to post
Share on other sites
Dnia 19.04.2019 o 00:14, Master napisał:

Jednym z częstszych popełnianych błędów jest łączenie starej i nowej składni. Nie spotkałem się jeszcze z polskim objaśnieniem różnić pomiędzy starą, a nową składnią.

halo?

 

 

Czysty kod:
1. Za mało/za dużo komentarzy

2. Niepoprawne nazewnictwo zmiennych/funkcji

3. Boby takie jak:

1. if ( true ) {}
2. if (cos) { cos; } else { cosinnego; }

4. Nieumiejętne wcięcia / entery (czytelność kodu)

5. Brak metodologii Don't Repeat Yourself

6. Rozsądne używanie klamer { }

7. Łączenie if'ów, pamiętając, że warunki sprawdza się od lewej do prawej czyli jeśli jest coś w stylu if (war1 && war2 && war3) to możemy zoptymalizować if'a dając na sam początek warunki odrzucające jak najwięcej przypadków lub te zabierające jak najmniej czasu

  • Lubię to! 2
  • Dobry pomysł! 1

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.


  • Recently Browsing   0 members

    No registered users viewing this page.

Nasza historia

Na początku byliśmy małą grupą internetowych znajomych, którzy stwierdzili, że potrzebne jest solidne forum, na którym znajdą się ludzie z dużą wiedzą programistyczną ukierunkowaną na CS:GO. Pomysł powstał na początku 2018 roku, a parę miesięcy później, 19 kwietnia, powstała ta strona internetowa. Jako alternatywna odpowiedź na inne tego typu miejsca, poważnie podeszliśmy do tematu, najpierw tłumacząc angielską dokumentację SourceMod'a na język polski, a potem pisząc rozległe poradniki i wypełniając forum najpotrzebniejszymi rzeczami dla właścicieli serwerów i programistów. Cała nasza Ekipa jest dumna z pracy jaką w to włożyliśmy i cieszymy się że zbierają się wokół nas zarówno ludzie znający tematy sourcepawn'a i konfiguracji, jak i również nowe twarze w tym "biznesie", którym z chęcią niesiemy wiedzę oraz pomoc w rozwiązywaniu problemów.

Największe modyfikacje serwerowe

×
×
  • Create New...