Nazwa pcvar akronim od pointer command variable tłumacząc na ojczysty język możemy tutaj rozumieć zmienne sterowane metodą przez wskaźnik.
Jeśli nic nie mówi Ci skrót cvar zajrzyj tu: Cvar`y - AMXX.pl: Support AMX Mod X
Teraz krótka notka o tym jakie są zalety pcvar'ów nad cvarami.
1.Piszemy plugin, dajmy na to będzie zmieniana cena przedmiotu, który będzie można kupić. Chcemy aby przyszły twórca serwera nie zmieniał nic w kodzie samego pluginu lecz, aby mógł sterować tą wartością pośrednio przez komendy amxx. Nic prosztszego, bowiem pcvar'y mają bardzo podobną wręcz taką samą rejestrację w maszynie amxx, więc dużo nie trzeba zapamiętywać aczkolwiek zawsze można zajrzeć do dokumentacji. Dla przykładu wcześniejszej ceny oto taki kodzik prosty:
// najpierw deklarujemy sobie globalnie zmienna tu: wskaźnik, który będzie właśnie wskazywał na nasz cvar
new g_Pcvar_kasa_na_item1; // zapis zmiennej zgodnie z notacją węgierską (HN)
//gdzieś w forwardzie gdzie powinniśmy umieścić nasz wskaźnik i przypisać do niego rejestrację cvar'u na przykład plugin_precache
public plugin_precache( ) {
g_Pcvar_kasa_na_item1 = register_cvar( "Item 1", "1500" ); // rejestrujemy zwykły cvar i przypisujemy jego return do wskaźnika
}
No dobrze ale przecież jako programiści chcemy jakoś używać tej wartości, więc do tego służą natywy takiej jak:
get_pcvar_num , dla liczb całkowitych
get_pcvar_float , dla liczb zmiennoprzecinkowych
get_pcvar_string , dla łańcuchów
Proforma powiedzmy, że zachciało nam się nagle pobrać wartość naszego cvara, więc po prostu zróbmy to:
new Zmienna = get_pcvar_num( g_Pcvar_kasa_na_item1 ); // przypisujemy do nowej zmiennej wartość naszego cvar'a używając natywy pobrania przez wskaźnik
Prawda, że wcale nie skomplikowane ? Bardzo podobnie jest z ustawianiem nowej wartości dla takiegoż cvar'u w trakcie działania pluginu.
set_pcvar_num , dla liczb całkowitych
set_pcvar_float , dla liczb zmiennoprzecinkowych
set_pcvar_string , dla łańcuchów
2. Wymieniam dalej zalety, więc trzeba powiedzieć, że taki sposób pobierania wartości jest bardzo szybki ( około 10 razy szybszy niż zwykły np. get_cvar_num ).
3. No i tutaj kolejna duża wydaje mi się zaleta pcvar'ów. Wyobraźmy sobie plugin. Mamy mnóstwo różnego kodu w tym właśnie cvary. Chcemy napisać inny plugin, który będzie coś wykonywał na serwerze ale, coś innego koliduje z nim, lub chcemy w trakcie innego pluginu bądź wydarzenia zaplanować / ustawić inna wartość cvar'u. Do tego właśnie służy nam wskaźnik.
Po co mamy się męczyć i analizować kod bądź też mieszać w nim skoro możemy to zrobić z zewnątrz.
Dlaczego mamy taki dostęp ? Bardzo proste deklarowaliśmy wcześniej zmienna globalnie, która na dodatek jest wskaźnikiem. Teraz możemy z niej skorzystać.
// mamy inny nowy plugin
//po pierwsze globalnie deklarujemy pointer a jakże by inaczej
new g_pointerOldCvar;
// no i teraz gdzieś w kodzie potrzebujemy zmienić albo pobrać wartość cvar'u z tamtego wcześniejszego pluginu, robimy to tak
g_pointerOldCvar = get_cvar_pointer( "Item 1" );
Gdy pobraliśmy wskaźnik to możemy wykonywać na nim już te operacje co wcześniej wypisałem.
4. Można nimi manipulować przede wszystkim w cvar'ach gry przykład:
new g_pSkyName;
g_pSkyName = get_cvar_pointer( "sv_skyname" );
set_pcvar_string( g_pSkyName, "NIEBO1" );
Teraz wady:
1. Jeśli nie zamierzasz używać tego do celów w podpunktach 3 i 4 lub w przypadkach wcześniejszych, więcej niż kilka razy to polecam zostać przy zwykłych cvarach.
Myślę, że się przyda i uzupełni temat, który podałem w linku.