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
 

Jointovsky - zdjęcie

Jointovsky

Rejestracja: 11.07.2014
Aktualnie: Nieaktywny
Poza forum Ostatnio: 20.05.2016 09:37
-----

#560499 Drzewa słownikowe, czyli Trie

Napisane przez BlackPerfum w 03.08.2013 08:58

Zalecam przed nauką obsługiwania się biblioteką "celltrie" naukę "cellarray" gdyż są ów biblioteki dosyć powiązane ze sobą. Niestety biblioteka "celltrie" nie jest opisana ani w dokumentacji na amxx.pl, ani na wiki amxmodx`a, dlatego jeśli popełnię jakieś literówki proszę o wyrozumiałość ;D. Nie sprawdzałem czy w AMXX-Studio jest ich opis gdyż go nie używam. Główną zaletą korzystania z "celltrie" jest możliwość dynamicznego zarządzania pamięcią ;D

 

 

1. Różnice CellTrie od CellArray

w "celltrie" wyszukuje się dane za pomocą stringa (porównywalne do nvault), a w "cellarray" za pomocą indexu.

nie trzeba po kolei zapełniać miejsca jak w przypadku "cellarray" funkcjami "push"

 

 

2. Deklaracja Trie

Tak samo jak w przypadku tablic dynamicznych najpierw trzeba stworzyć zmienną poprzedzoną enum (chodzi o typ zmiennej), która będzie naszym uchwytem.

new Trie:Uchwyt

Po stworzeniu zmiennej możemy do niej "włożyć" nasz uchwyt stwarzany przy deklaracji tablicy Trie.

Uchwyt = TrieCreate()

W ten sposób ulokowaliśmy sobie troszkę miejsca na nasze "drzewko" i uchwyt do niego zapisaliśmy w zmiennej "Uchwyt" ;D

 

 

3. Zapis Danych

Jak wyżej wspomniałem w "celltrie" można od razu zapisywać dane w tym miejscu w którym się chce tzn. nie trzeba(nie można) używać funkcji "push"

Można zapisywać dane na trzy sposoby:

• Jako liczbę/znak:

TrieSetCell(Uchwyt,klucz[],wartość)

• Jako ciąg znaków:

TrieSetString(Uchwyt,klucz[],wartość[])

• Jako tablicę danych:

TrieSetArray(Uchwyt,klucz[],wartość[])

• Uchwyt - Uchwyt do naszego "drzewka" 

• klucz - Unikalny klucz(ciąg znaków)

• wartość - Nasze dane, które chcemy zapisać

 

 

4. Odczyt Danych

Jeśli już potrafimy zapisać dane to pozostaje nam ich odczytanie.

Podobnie jak w przypadku zapisywania, odczytać można na trzy sposoby:

Jako liczbę/znak:

TrieGetCell(Uchwyt,klucz[],wartość)

• Jako ciąg znaków:

TrieGetString(Uchwyt,klucz[],wartość[],rozmiar)

• Jako tablicę danych:

TrieGetArray(Uchwyt,klucz[],wartość[],rozmiar)

• Uchwyt - Uchwyt do naszego "drzewka" 

• klucz - Unikalny klucz(ciąg znaków), którego użyliśmy do zapisu

• wartość - zmienna do której referencyjnie zostaną przekazane dane

• rozmiar - maksymalny rozmiar danych jakie chcemy otrzymać

Dodatkowo każda z powyższych funkcji(pobierających dane) zwraca true/false zależnie od tego czy znaleziono nasz klucz

 

 

4. Czyszczenie/Niszczenie

Tak samo jak w "cellarray" można czyścić dane, a nawet powinno się (gdy zajmują nie potrzebnie miejsce)

Do tego służy funkcja:

TrieClear(Uchwyt)

Kolejnym podobieństwem do "cellarray" jest funkcja pozwalająca na wyczyszczenie danych oraz zwolnienie ulokowanego przez nas miejsca:

TrieDestroy(Uchwyt)

A jeśli nie chcemy czyścić wszystkich danych tylko dane pod jednym kluczem to możemy posłużyć się tą funkcją:

TrieDeleteKey(Uchwyt, klucz[])

• Uchwyt - Uchwyt do naszego "drzewka"

• klucz - Unikalny klucz(ciąg znaków), którego użyliśmy do zapisu

Funkcja "TrieDeleteKey" dodatkowo zwraca czy klucz istnieje

 

4. Funkcje ułatwiające korzystanie z Trie

Niestety jest tylko jedna, która sprawdza czy podany klucz istnieje

TrieKeyExists(Uchwyt, klucz[])

Zwraca czy klucz istnieje

• Uchwyt - Uchwyt do naszego "drzewka"

• klucz - Unikalny klucz(ciąg znaków), którego użyliśmy do zapisu

 

4. Praktyczne użycie

Może teraz troszkę praktyki, a więc wychwyćmy moment gdy gracz wpisz na "say" jakieś słowo z podanego pliku, po czym pojawi mu się tekst napisany obok danego słowa.

Opis całego pluginu zamieszczę w komentarzach

Spoiler

A tak wygląda nasz plik pod ścieżką "addons/amxmodx/configs/Slowa.ini"

amxx Nieoficjalne forum AMX MOD X
[...]

Teraz gdy gracz wpisze na "say" słowo "amxx" to pokaże mu się zielona wiadomość "Nieoficjalne forum AMX MOD X"


  • +
  • -
  • 13


#651546 [ROZWIĄZANE] Konfiguracja VIMa do pracy z AMXX

Napisane przez GwynBleidD w 20.07.2014 17:49

A pewnie :)

Co prawda podświetlania składni stricte pod AMXXową wersję pawna nie ma, ale ogólnie pod Pawna (i pod SourcePawna) jest. Wystarczy sobie zainstalować, ewentualnie troszkę przerobić i viola. Do tego dopiąć sobie skrót do kompilacji otwartego pliku i to chyba wszystko, czego nam potrzeba.
  • +
  • -
  • 1