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
 

Vertricus - zdjęcie

Vertricus

Rejestracja: 29.10.2008
Aktualnie: Nieaktywny
Poza forum Ostatnio: 07.01.2015 14:26
****-

#388571 AMX Wiki

Napisane przez kasza w 30.03.2012 22:25

lepiej jest tak jak jest bo na forum jak czegos nie rozumiesz to piszesz posta w dziale z poradnikiem i ktos ci to wyjasni jest to prostsze niz pisać nowy temat bo nie rozumiesz czegos z Wiki

pozatym nie ma co się rozdrabniać i lepiej mieć wszystko w jednym miejscu


Według mnie forum jest lepsze. I tak na początku tylko by ktoś tam zaglądał, bo nowa strona, bo umieszczane są artykuły, ale i tak większość problemów byłaby kierowana na forum. Ludzie już są tacy, że jak im się daje, to wezmą, ale żeby znaleźć coś i samemu zrobić, to już jest problem. Myślę, że kosztowałoby to dużo pracy oraz czasu. Jeśli miałaby powstać owa Wiki, to na pewno nie teraz.

Ktoś powie: przecież na forum też można to zamieścić. Owszem, ale na Wiki można stworzyć wygodniejszą strukturę, edytować artykuły mogą wszyscy (oczywiście edycja przez zwykłych użytkowników musiałaby być zatwierdzona przez administrację), wymusza pewną konwencję struktury artykułów (dzięki czemu wszystkie są bardzo czytelne) i umożliwia więcej opcji dotyczących zamieszczania treści. Co prawda nie ma możliwości tworzenia wtedy komentarzy do tutoriala, ale po co one wtedy, skoro każdy może sam poprawić błąd, czy napisać coś jaśniej (a do tego chyba wyłącznie komentarze służą, bo przecież pytania gdy ktoś nie rozumie czegoś raczej powinny trafiać do osobnych tematów).


  • +
  • -
  • 3


#304804 Skarga na administrację

Napisane przez R3X w 08.10.2011 23:22

głupszych żartów nie widziałem
  • +
  • -
  • 3


#303818 Kilka słów wyjaśnienia

Napisane przez Portek w 07.10.2011 07:43

Nie wiem po co to trollowanie**

Do trollowania to mu dużo brakuje, krytyka też potrafi być budująca - o ile potrafi się ją przyjąć z pewną dozą pokory.

Tylko Ty ;) nie będę wypowiadał się na temat Portka czy Abesa, po prostu nie ma co, i nie ten temat od tego. Ale skoro odeszliście, to co was tak po prawdzie interesuje to co się dzieje teraz? może wam się wszystko nie podobać, ale i tak tego nie zmienicie.

Wiesz co mnie najbardziej irytuje? Właśnie takie podejście do sprawy, jak miałem rangę to było lizanie d*py, jaki to on dobrych och-ach, a jak odszedłem to zaczęła się fala krytyki że nic nie robiłem. To co najbardziej irytuje mnie w pracy administratora to fakt że niektóre zmiany i poświęcony czas widzi tylko on i garstka osób - jak Portuś odbierał telefony w okolicach północy że coś nie tak to wchodził, jak Portuś aktualizował silniki, jak Portuś poświęcał na to swój prywatny czas to było dobrze. Szkoda że większość nie wie że pomagałem przy aktualizacji silnika IPB, na długo po tym jak odszedłem, po co? Nie dla rozgłosu, pieniędzy, nie dla chęci powrotu, ale zwyczajnie dlatego że mi na tym forum zależy! Szkoda że tego tak naprawdę większość nie widzi...

Starej załogi nie wkurza to że odeszli i teraz chcą dopiec innym, tylko fakt że zapanowała jakaś dziwna moda na udupianie każdego, za byle co, jakieś śmieszne kasowanie czy to postów, czy prywatnych statusów, edycja profili, gdzie regulamin łamany nie był. Ostatnio nawet statusy tak przeszkadzały niektórym że zostały wyłączone ze strony głównej - nie wiem czy u wszystkich, w grupie czy też u "niewygodnych" osób, ale to zaczyna być paranoja. Inwigilacja i dyktatura....
  • +
  • -
  • 4


#303798 Kilka słów wyjaśnienia

Napisane przez Drzanas w 06.10.2011 22:20

Pavulon z własnego doświadczenia wiem że z administracją się nie wygra. Jak niektórzy sobie coś wmówią to "mów do słupa a słup jak d*pa".
  • +
  • -
  • 2


#247418 BF3 premiera

Napisane przez Abes Mapper w 08.05.2011 14:34

A komu się chce? Po prostu Polska to naród leniwy. Może nie aż tak ale coraz bardziej. Większość osób patrzy na siebie
  • +
  • -
  • 1


#297366 Flagi

Napisane przez DarkGL w 18.09.2011 11:34

Flagi dostępne standardowo :
ADMIN_ALL - wszystkie
ADMIN_IMMUNITY - flaga "a"
ADMIN_RESERVATION - flaga "b"
ADMIN_KICK - flaga "c"
ADMIN_BAN - flaga "d"
ADMIN_SLAY - flaga "e"
ADMIN_MAP - flaga "f"
ADMIN_CVAR - flaga "g"
ADMIN_CFG - flaga "h"
ADMIN_CHAT - flaga "i" *
ADMIN_VOTE - flaga "j"
ADMIN_PASSWORD - flaga "k"
ADMIN_RCON - flaga "l"
ADMIN_LEVEL_A - flaga "m"
ADMIN_LEVEL_B - flaga "n"
ADMIN_LEVEL_C - flaga "o"
ADMIN_LEVEL_D - flaga "p"
ADMIN_LEVEL_E - flaga "q"
ADMIN_LEVEL_F - flaga "r"
ADMIN_LEVEL_G - flaga "s"
ADMIN_LEVEL_H - flaga "t"
ADMIN_MENU - flaga "u"
ADMIN_ADMIN - flaga "y"
ADMIN_USER - flaga "z"
Flagi dodatkowe :
ADMIN_FLAG_V - flaga "v"
ADMIN_FLAG_W - flaga "w"
ADMIN_FLAG_X - flaga "x"

żeby ich używać trzeba dodać do pluginu
#define ADMIN_FLAG_V (1<<21)
#define ADMIN_FLAG_W (1<<22)
#define ADMIN_FLAG_X (1<<23)

sprawdzenie czy gracz ma flage
if(get_user_flags(id) & ADMIN_LEVEL_A){
	//gracz ma flage m
}

sprawdzanie czy gracz nie ma flagi
if( !(get_user_flags(id) & ADMIN_LEVEL_A) ){
	//gracz nie ma flagi m
}

sprawdzanie czy gracz ma kilka flag
public has_flags(id,string[])
{
	new ret=1
	new byte
	
	new len = strlen(string)
	new p_flag = get_user_flags(id)
	
	for(new i=0;i<=len;i++)
	{
		if(string[i]>='a' && string[i]<='z') byte = (1<<(string[i]-'a'))
		else if(string[i]>='A' && string[i]<='Z') byte = (1<<(string[i]-'A'))
		else if(string[i]==',' && ret==1) return 1
		else if(string[i]==',') ret=1
		if(byte!=0 && !(p_flag & byte)) ret=0

		byte=0
	}
	
	return ret
}

Przyklady:
Jak ma dzialac na - a lub b lub c - to dajemy
has_flag(id,"a,b,c")
Jak ma dzialac tylko gdy user ma flage - a i b i c - to dajemy
has_flag(id,"abc")
Jak ma dzialac w przypadkach - a i b lub a i c lub b i c - to dajemy
has_flag(id,"ab,ac,bc")

Gracz musi mieć wszystkie 3 flagi
new flaga = (ADMIN_LEVEL_A | ADMIN_LEVEL_B | ADMIN_LEVEL_C)
if((get_user_flags(id) & flaga) == flaga) {
	// KOD
}
lub inaczej
new sprawdz = get_user_flags(id)
if(sprawdz & ADMIN_LEVEL_A && sprawdz & ADMIN_LEVEL_B && sprawdz & ADMIN_LEVEL_C) {
	// KOD
}

Inne przykłady:
if (get_user_flags(id) & DEFINICJA_FLAGI) {
	//osoba ma jakas tam flage
} else {
	//osoba nie ma jakies tam flagi
}

public client_authorized(id)
{
	if( get_user_flags(id) & ADMIN_BAN)
	client_print(0,print_chat,"Admin wchodzi na server")
}

  • +
  • -
  • 55


#289531 Loading Song Advanced - pobiera, nie odgrywa.

Napisane przez ogury w 29.08.2011 22:31

Posiadam plugin:
http://forums.allied...ad.php?p=183502
Mój problem polega na tym, że muzyka się pobiera, ale nie odgrywa. Co może być tego powodem?
Muzyka jest w takim formacie:
Mp3, 128 kbps, 2 chanells, 44Khz.


#240700 Obliczanie wartości wyrażeń

Napisane przez R3X w 23.04.2011 17:51

Obliczanie wartości wyrażeń

Załączony plik .inc (wyrażenia.zip) zawiera funkcję Oblicz, która zwraca wartość na podstawie podanego wyrażenia. Wyrażenie składać się może z liczb całkowitych (dodatnich oraz ujemnych) i operatorów:
(, ), %, *, /, +, -.


stock Oblicz(const szWyrazenie[]);

Przykład
new a = Oblicz("(12+3)/5");
czyli za a podstaw 3

Załączone pliki


  • +
  • -
  • 8


#230199 Challenge - wyzwania i nagrody

Napisane przez R3X w 26.03.2011 14:57

Challenge
v.0.6.1
Z powodu sposobu konfiguracji przeznaczony jest dla osób obeznanych z pisaniem własnych pluginów.
Zainteresowanych zapraszam do tematu: [Challenge] Gotowce i przykłady - AMXX.pl: Support AMX Mod X

Pomysłem zarzucił: Skull3D - Przeglądanie profilu - AMXX.pl: Support AMX Mod X

Dołączona grafika

Platforma do tworzenia wyzwań i nagradzania za ich spełniania. Używa bazy danych do gromadzenia statystyk graczy dla konkretnych broni i tylko tych, które wybierzemy. Oprócz tego sumuje czas spędzony na serwerze oraz zapisuje datę pierwszego połączenia, dzięki temu możemy wykryć kto gra długo / od dawna i też przypisać takim graczom jakiś bonus.

Można udostępnić graczom listę wyzwań:
Dołączona grafika

Przewidziałem 3 przypadki zapisywania statystyk:
  • statystyki broni standardowych
    • czyli zabicia z kałacha czy m4, DeathMsg łapane zawsze
  • statystyki broni niestandardowych
    • czyli zabicia z magicznych przedmiotów czy skilli, DeathMsg łapane zawsze tylko z użyciem Orpheu, bez tego modułu trzeba używać Ham_TakeDamage lub emessagebegin()
  • statystyki broni własnych
    • czyli staty za cokolwiek chcemy, sami dodajemy punkty funkcją ch_add_user_stats()

Wyzwania definiujemy w osobnym pluginie. Mogą one łączyć opisane wyżej przypadki, a także uwzględniać czas gry na serwerze.

Włączenie zapisywania statystyk danej broni to wywołanie w plugin_init()

challenge_uses_stats(wid);
np.
challenge_uses_stats(CSW_KNIFE);

oznacza, że plugin będzie zbierał informację o zabiciach z noża.

Pobranie zgromadzonych statystyk gracza umożliwia funkcja

ch_get_user_stats(id, wid, hs=0);

Od wersji 0.2 możemy dodawać własne pola statystyk, nie koniecznie związane z zabijaniem. Wśród przykładów dałem opcję zapisywania ilości rozbrojonych i podłożonych bomb (folder custom/).

Ważne
Skompilowanie z dołączeniem orpheu spowoduje łapanie wszystkich informacji o zabójstwach, bez nich zapisywane są tylko te wyrządzone Ham_TakeDamage lub z użyciem emessagebegin()
Sygnatury funkcji zapożyczone z Funkcja you] Advanced - AMXX.pl: Support AMX Mod X

Dołączona grafika
Standardowa


Opcje kompilacji

wersja 0.5 i starsze

Odkomentuj
//#define USING_ORPHEU
jeśli chcesz użyć modułu Orpheu (http://forums.allied...ad.php?t=103855)


Odkomentuj
//#define USING_DHUD
jeśli chcesz użyć efektów Dynamiczny HUD - AMXX.pl: Support AMX Mod X

Wygląda to mniej więcej tak: YouTube - Challenge DHUD.wmv

od 0.5.1
dostępne są 2 cvary: amx_challenge_useorpheu i amx_challenge_usedhud
aby użyć orpheu należy go zainstalować na serwerze i ustawić pierwszy cvar na 1
to samo z dhud, należy go zainstalować na serwerze i ustawić ten drugi cvar na 1

Dołączona grafika
Dane mogą być zapisywane na 2 sposóby:

SQLite (domyślnie)
  • w pliku na serwerze
  • wymaga odblokowanego modułu sqlite w modules.ini
  • plik bazy może zostać stworzony przez plugin tylko jeśli ma do tego prawo (chmod 600), możliwe, że trzeba będzie wrzuć pusty plik o podanej w cvarze nazwie na FTP

Ustawienia:
//SQLite
amx_challenge_sqltype 	"sqlite"
amx_challenge_host 	""
amx_challenge_user 	""
amx_challenge_pass 	""
amx_challenge_db 	"addons/amxmodx/data/challenge.db"
amx_challenge_prefix 	""


MySQL
  • osobny serwer bazy danych
  • wymaga odblokowanego modułu mysql w modules.ini
  • łatwiej o prezentację na stronie WWW i jest bardziej niezawodny

Ustawienia:
//MySQL
amx_challenge_sqltype 	"mysql"
amx_challenge_host 	"localhost"
amx_challenge_user 	"root"
amx_challenge_pass 	"root"
amx_challenge_db 	"challenge"
amx_challenge_prefix 	""


amx_challenge_save 1|2|3

  • typ zapisu
  • 1 - steamid
  • 2 - nick
  • 3 - ip

amx_challenge_list_available 0|1

  • włącz/wyłącz możliwość podglądu wyzwań, ustawienie na 0 blokuje komendę /challenge


amx_challenge_bots 0|1|2

  • zapisywanie statystyk botów
  • 0 - nie zapisu
  • 1 - tylko grające
  • 2 - wszystkie

amx_challenge_minplayers 0

  • wymagana ilość grających graczy na serwerze do zliczania statystyk


amx_challnege_usedhud 0

  • czy używać DHUD (jeśli dostępne)

amx_challnege_orpheu 0

  • czy używać Orpheu (jeśli dostępne)

Zmiany:

0.6.1
- poprawiona numeracja
- nowa funkcjonalność: możliwość podania koloru wiadomości
native challenge_show_custom_info(id, const szChallenge[], const szAward[], const iColor[3] = {255, 255, 255});

0.6.0
- poprawiona kolejka DHUD

0.5.2
- bugfix: plugin tworzył zbędny, kumulujący się plik temp.txt

0.5.1
- usunięty bug z motd po wyjściu z menu challenge
- nowy cvar: amx_challenge_minplayers
- nowy cvar: amx_challenge_useorpheu
- nowy cvar: amx_challenge_usedhud
- nowy natyw: challenge_get_state
- nowy natyw: ch_set_user_stats
- forward client_gain_point : można zablokować dodanie punkty zwracając PLUGIN_HANDLED

0.5
- możliwość tworzenia grup wyzwań
wystarczy je przypisać funkcją challenge_set_group() z tą samą nazwą grupy

0.4
- rozszerzone API
- nowy funkcja: client_data_loaded(id){} informuje o wczytaniu danych z bazy
- nowa funkcja: client_gain_point(id, wid, hs){} informuje o przyznaniu punktu


0.3.1
- informacje o zdobytych osiągnięciach (klient może wyłączyć je komendą /infooff)
- lista wyzwań i postęp: komenda /challenge

0.3
- współpraca z SQLite,

0.2.2
- bugfix, nie zliczało statów
- automatyczne zapisywanie niestandardowych broni do pliku

0.2.1
- wrzucało zbędne wpisy w logach, teraz już nie

0.2
- możliwa współpraca z Orpheu
- funkcja zmiany statystyk

0.1.2
- nie dodaje istniejącej już niestandardowej broni



Gotowe wyzwania:

Załączone pliki


  • +
  • -
  • 22


#223012 Wklejka AMXX.pl

Napisane przez mgr inż. Pavulon w 08.03.2011 16:43

Startuje forumowa Wklejka Dołączona grafika

Czyli aplikacja umożliwiająca wklejenie(tekst lub z pliku) dowolnego tekstu jakim może być kod programu czy plik konfiguracyjny.
Taki kod możemy następnie prosto udostępnić za pomocą linka, np: Wklejka 12995981461736
Dostępne jest wiele typów kolorowania składni wraz z odnośnikami do opisów funkcji (np. do naszej Dokumentacji AMXX)
A w profilu użytkownik każdy ma wgląd do listy ostatnio dodanych przez siebie wklejek.


Dzięki temu uzyskujemy większą przejrzystość na forach czy też w komunikatorach.
  • +
  • -
  • 13


#208783 [5.8d/5.9l] Odejmowanie doświadczenia za zabicie gracza z zbyt dużą różnicą p...

Napisane przez sebul w 23.01.2011 21:51

sebul, koksie, to chyba ten sam temat co dałeś do niego linka nie?

Dałem link do mojego posta? :o I nie jestem koksem...
  • +
  • -
  • 0


#201780 Diablo 6.0 Promo

Napisane przez Pekens54 w 31.12.2010 16:07

Jak już tak sprawdzałeś z kiedy jest ten temat to mogłeś również sprawdzić kiedy Miczu napisał ostatni post, a było to dość dawno - 14 sierpień 2010 :!:


I po co to piszesz? Pytanie zadane Miczu
  • +
  • -
  • -2


#201833 Diablo 6.0 Promo

Napisane przez strikepremium w 31.12.2010 18:47

I po co to piszesz? Pytanie zadane Miczu

dokładnie...


#189497 Efekt Pingu Gracza 1.3

Napisane przez Seba w 18.11.2010 11:55

Nie chcę mi się pisać o wydajności gdy kilkaset razy na sekundę:

a) pobierany zostaje ping
B) zostaje wykonane wielkie porównanie
c) ustawiony efekt via fun


#109357 Natywy

Napisane przez R3X w 03.02.2010 00:34

Natywy

1. Opis

Funkcje natywne są dostępne dla każdego zainstalowanego pluginu AMXX. Udostępniają funkcje natywne tworzymy z naszego pluginu jakby dodatkową bibliotekę. Dzięki temu mamy możliwość podziału większego dzieła nie tylko na pliki, a na osobne pluginy. Pozwala to na dużą elastyczność kodu oraz pracę z krótszymi, mniej skomplikowanymi programami.

Krótko: Możemy korzystać z danych jednego pluginu w innym.


2. Przygotowanie

Aby to zadziałało potrzeba dwóch współgrających elementów:

  • pluginu-biblioteki, który obsługuje funkcje
  • pliku .inc, który pozwoli korzystać z tych funkcji w innym pluginie
No i pluginu, który będzie korzystał z dobrodziejstw biblioteki.


Na potrzeby tego artykułu stworzę testową bibliotekę <nicto> (czyt. "nic to")

INC
Weźmy się najpierw za plik .inc. Raz dołączony plik nie będzie więcej potrzebny, więc żeby nie powodował problemów ograniczymy jego wykonywanie:

#if defined _nicto_included
	#endinput
#endif

#define _nicto_included

sprawdzamy czy stała "_nicto_included" istnieje (wymyślamy coś własnego, nazwa powinna być unikatowa)
jeśli tak to kończymy plik (#endinput)
jeśli nie to ją definiujemy, potem dołączana jest reszta pliku

dalej informujemy kompilator, że korzystamy z biblioteki nicto:

#pragma library "nicto"

i dalej nagłówki funkcji(nasze natywy lub forwardy[o nich będzie następny artykuł ;P]), stałe, enumeracje lub całe funkcje (stocki)

cały plik inc może wyglądać np tak:

#if defined _nicto_included
	#endinput
#endif

#define _nicto_included

#pragma library "nicto"

enum stan{
	NIC,
	COS
}

native Float:nic();

native cokolwiek(id, stan:s);

native moze_cos(id, Float:fTime, const szMessage[]);

SMA(1)
Pierwszy kod sma to będzie nasza biblioteka. Sam plugin może działać sobie po swojemu tak jak każdy inny. Kluczowym elementem jest fragment:

public plugin_natives(){
	
}

Po pierwsze rejestrujemy bibliotekę:
register_library("nicto");

Po drugie, trzecie i czwarte:
register_native("nic", "n_nic");
register_native("cokolwiek", "n_cokolwiek");
register_native("moze_cos", "n_moze_cos");

register_native("funkcja_biblioteki", "funkcja_pluginu");
funkcja_biblioteki - to ta z inc`a, będzie wywoływana w innych pluginach
funkcja_pluginu - ona będzie odpowiedzialna za działanie tej pierwszej; jej parametry to id pluginu, w którym wywołano natyw oraz ilość argumentów, zwracany typ musi być zgodny z tym podanym dla funkcja_biblioteki w inc`u


Na tym etapie biblioteka wygląda tak:
#include <amxmodx>
#include <amxmisc>

#define PLUGIN "NicTo Lib"
#define VERSION "1.0"
#define AUTHOR "R3X"


public plugin_init() {
	register_plugin(PLUGIN, VERSION, AUTHOR)
}
public plugin_natives(){
	register_library("nicto");
	register_native("nic", "n_nic");
	register_native("cokolwiek", "n_cokolwiek");
	register_native("moze_cos", "n_moze_cos");
}
//plugin - id pluginu
//params - ilość argumentów
public Float:n_nic(plugin, params){
	
}
public n_cokolwiek(plugin, params){
	
}
public n_moze_cos(plugin, params){
	
}

Funkcja nic ma nagłówek: native Float:nic();
=żadnych parametrów, a zwracać ma floata

skoro 'nic', to możemy zrobić np. to:
public Float:n_nic(plugin, params){
	return 0.0;
}



Funkcja cokolwiek korzysta z typu danych deklarowanego w samym incu. Nic nie stoi na przeszkodzie, aby go tu dołączyć. Problemy się zaczną, gdy będziemy wywoływać własne funkcje natywne w pluginie-bibliotece. Po prostu to nie przejdzie :D



w n_cokolwiek oczekujemy 2 parametrów id, i s; musimy mieć pewność, że są:



public n_cokolwiek(plugin, params){
 	if(params < 2){
 		log_amx("Zbyt malo parametrow funkcji cokolwiek!");
 		return 0;
 	}
 	return 1;

 }



Wartość samych parametrów pobrać nam pozwolą funkcje dla danego typu danych:



get_string(param, dest[], maxlen); // tekst

get_param(param); //komórka pamięci (int, char, bool)

Float:get_param_f(param); //float



get_param_byref(param); // komórka przez referencję

Float:get_float_byref(param); //float przez referencję



get_array(param, dest[], size); //tablica komórek

get_array_f(param, Float:dest[], size); //tablica float`ów




Jako, że tablice bez ‘const’ i jawne referencje pozwalają na zmianę wartości argumentów istnieją też odpowiedniki set_*



set_string(param, dest[], maxlen);


set_param_byref(param, value);

set_float_byref(param, Float:value);



set_array(param, const source[], size);

set_array_f(param, const Float:source[], size);






W każdym przypadku param to numer parametru licząc od lewej zaczynając od 1.





Skupmy się na pobieraniu. Natyw cokolwiek przekazuje id oraz stan:s. Ich wartości w n_cokolwiek to:



new id = get_param(1);
new stan:s = stan:get_param(2);


Aby zachować układ zmiennych i uniknąć ‘tag mismatch’ dokonałem rzutowania do stan:



Załóżmy, że id to index gracza, a funkcja pokazuje mu na czacie komunikat zależny od stanu COS/NIC. Biblioteka powinna teraz wyglądać tak:



#include <amxmodx>
 #include <amxmisc>
 #include <nicto>

 #define PLUGIN "NicTo Lib"
 #define VERSION "1.0"
 #define AUTHOR "R3X"


 public plugin_init() {
 	register_plugin(PLUGIN, VERSION, AUTHOR)
 }

 public plugin_natives(){
 	register_library("nicto");
 	register_native("nic", "n_nic");
 	register_native("cokolwiek", "n_cokolwiek");
 	register_native("moze_cos", "n_moze_cos");

 }
 //plugin - id pluginu
 //params - ilość argumentów
 public Float:n_nic(plugin, params){
 	return 0.0;
 }
 public n_cokolwiek(plugin, params){
 	if(params < 2){
 		log_amx("Zbyt malo parametrow funkcji cokolwiek!");
 		return 0;
 	}

 	new id = get_param(1);
 	if(!is_user_connected(id))
 		return 0;

 	new stan:s = stan:get_param(2);
 	switch(s){
 		case NIC: client_print(id, print_chat, "NIC");
 		case COS: client_print(id, print_chat, "COS");
 	default: return 0;
 	}
 	return 1;
 }

 public n_moze_cos(plugin, params){

 	

 }



Do pełniejszego obrazu natywu potrzebujemy danych z tego pluginu. Utwórzmy tablicę globalną giRandom [33], i przy wejściu na serwer przypiszmy graczowi losową liczbę 0-100.



Niech funkcja może_cos zwróci wartość tablicy z podanego indeksu (id) i wrzuci do logów wartości fTime i szMessage[].



public n_moze_cos(plugin, params){
 	if(params < 3){
 log_amx("Zbyt malo parametrow funkcji moze_cos!");
 		// -1 nie mieści się w przedziale 0-100, więc będzie można wychwycić błąd
 return -1; 
 	}

 	new id = get_param(1);
 	if(id < 0 || id > 32) //nie musi byc gracza, wystarczy ze jest taki indeks w tablicy
 		return -1;

 	new Float:fTime = get_param_f(2);
 	new szMessage[32];
 	get_string(3, szMessage, 31);
 	log_amx("fTime=%f, szMessage = %s",fTime, szMessage);

 	return giRandom[id];

 }

SMA(2)
Teraz pora na plugin, który będzie korzystał z biblioteki. Po prostu dołączamy <nicto> i używamy podanych funkcji np tak:

#include <amxmodx>
#include <amxmisc>
#include <nicto>

#define PLUGIN "New Plug-In"
#define VERSION "1.0"
#define AUTHOR "R3X"


public plugin_init() {
	register_plugin(PLUGIN, VERSION, AUTHOR)
	
	log_amx("Nic:%f", nic());
	register_clcmd("say /cokolwiek","cmdCokolwiek");
}
public cmdCokolwiek(id){
	cokolwiek(id, NIC);
	moze_cos(id, 3.14, "Pi");
	return PLUGIN_CONTINUE;
}


Info:
ważne by plugin korzystający z biblioteki był niżej w plugins.ini niż sama biblioteka. W innym przypadku plugin korzystający z biblioteki musisz przefiltrować natywy:
set_native_filter

Załączone pliki


  • +
  • -
  • 45