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

Pcvar'y


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

#1 Ortega

    mów mi Orti

  • Power User

Reputacja: 363
Wszechpomocny

  • Postów:640
  • GG:
  • Steam:steam
  • Imię:Marcin
  • Lokalizacja:Sosnowiec
Offline

Napisano 20.12.2010 14:48

*
Popularny

Natchnęło mnie na objaśnienia z czym się podaje pointer cvary. Pewnie większość z was używała ich już bądź używa lecz czy na prawdę każdy wie dlaczego ? Tutaj postaram się odpowiedzieć na pytanie: "Dlaczego pcvary powinny być stosowane lub dlaczego nie powinny być?"

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 :D? 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.
  • +
  • -
  • 12

#2 grs4

    Profesjonalista

  • Zbanowany

Reputacja: -1
Nowy

  • Postów:167
  • Lokalizacja:Wojkowice
Offline

Napisano 04.06.2011 14:20

dzięki, przynajmniej juz zrozumialem o co w nich chodzi +




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

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