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

Drzewa słownikowe, czyli TrieSzybka obsługa danych na podstawie string'ów

nie chce mi sie tagowac

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

#1 BlackPerfum

    Pseudo interakcja??

  • Power User

Reputacja: 459
Wszechobecny

  • Postów:575
  • Lokalizacja:...
Offline

Napisano 03.08.2013 08:58

*
Popularny

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"


Użytkownik BlackPerfum edytował ten post 17.07.2014 14:45

  • +
  • -
  • 13
Chcesz napisać do mnie na PW to:
Spoiler

Mój tok myślenia jest błędny? Wskaż mi błąd zmienie to!

Aktualnie bije limit 32 graczy (łącze serwery) ale nadal są lagi przy zbyt dużym przesyłu informacji Dołączona grafika
Gra się płynnie do 40~50 graczy potem łącze pada i zamiast biegać ludzie się teleportują Dołączona grafika

#2 DarkGL

    Nie oddam ciasteczka !

  • Administrator

Reputacja: 6 553
Godlike

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

Napisano 05.08.2013 12:15

Dobrym przykładem czym są CellTrie w pawn w odniesieniu do innych języków to

Arrays w PHP

Map Container w c++ lub

Dict ( dictionary ) w pythonie

 

Hash table http://en.wikipedia....wiki/Hash_table


  • +
  • -
  • 0

#3 Droso

    Dawniej HubertTM

  • Support Team

Reputacja: 1 291
Godlike

  • Postów:2 371
  • Steam:steam
  • Imię:Hubert
  • Lokalizacja:Wrocław
Offline

Napisano 05.08.2013 13:15

Poradnik bardzo czytelny. Na pewno się przyda, mi też :)


  • +
  • -
  • 0

Piszę pluginy pod: AMX MOD X oraz SOURCE MOD!

Na zlecenie i bez zlecenia zresztą też!


#4 Klakier

    Volenti non fit iniuria

  • Power User

Reputacja: 391
Wszechpomocny

  • Postów:878
  • GG:
  • Imię:Sebastian
  • Lokalizacja:Mogilno
Offline

Napisano 05.08.2013 18:10

Nieoficjalne* jak już, ale poza tym poradnik świetny !


  • +
  • -
  • 0

Sell - System Klanów (wojny, top15 etc)

 

Kontakt GG: 7285018


#5 sebul

    Godlike

  • Przyjaciel

Reputacja: 2 035
Godlike

  • Postów:5 411
  • Steam:steam
  • Imię:Sebastian
  • Lokalizacja:Ostrołęka
Offline

Napisano 05.08.2013 23:54

Należało by dodać, że TrieSetArray w wersji 1.8.1 amxmoda nie działa. Nie wiem czy już wszędzie (na każdym hostingu) jest wgrywana nowsza wersja, więc chyba jednak dobrze by było, aby każdy o tym wiedział.
  • +
  • -
  • 0

Posiadam TBM (inaczej PTB), które działa dużo lepiej niż zwykłe PTB, nawet na modach z lvlami. Zainteresowany? Proszę bardzo


#6 Droso

    Dawniej HubertTM

  • Support Team

Reputacja: 1 291
Godlike

  • Postów:2 371
  • Steam:steam
  • Imię:Hubert
  • Lokalizacja:Wrocław
Offline

Napisano 09.08.2013 09:04

set_task(10.0,"LoadMaps")

Nie ma takiego publica, tak mi się rzuciło ;)


  • +
  • -
  • 0

Piszę pluginy pod: AMX MOD X oraz SOURCE MOD!

Na zlecenie i bez zlecenia zresztą też!


#7 BlackPerfum

    Pseudo interakcja??

  • Autor tematu
  • Power User

Reputacja: 459
Wszechobecny

  • Postów:575
  • Lokalizacja:...
Offline

Napisano 09.08.2013 11:16

Hehe kod kopiowałem z mojego plugina zmieniającego mapy, dlatego mogłem coś przez przypadek zostawić. I jeszcze sorki za błędne ponumerowanie punktów.

Wystarczy podmienić to:

set_task(10.0,"LoadMaps")

Na:

set_task(10.0,"plugin_cfg")

Użytkownik BlackPerfum edytował ten post 09.08.2013 11:18

  • +
  • -
  • 1
Chcesz napisać do mnie na PW to:
Spoiler

Mój tok myślenia jest błędny? Wskaż mi błąd zmienie to!

Aktualnie bije limit 32 graczy (łącze serwery) ale nadal są lagi przy zbyt dużym przesyłu informacji Dołączona grafika
Gra się płynnie do 40~50 graczy potem łącze pada i zamiast biegać ludzie się teleportują Dołączona grafika

#8 MAGNET

    SourceLearned ;)

  • Moderator

Reputacja: 661
Wszechmogący

  • Postów:1 535
  • GG:
  • Imię:Olek
  • Lokalizacja:Dalekoo
Offline

Napisano 22.08.2013 08:21

Poradnik super, może się czegoś nauczę (o ile będę z tego kiedyś musiał skorzystać :P)
  • +
  • -
  • 0





Również z jednym lub większą ilością słów kluczowych: nie chce mi sie tagowac

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

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