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
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"
Użytkownik BlackPerfum edytował ten post 17.07.2014 14:45