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
 

stasekstaskowy - zdjęcie

stasekstaskowy

Rejestracja: 22.05.2010
Aktualnie: Nieaktywny
Poza forum Ostatnio: 06.12.2016 22:58
-----

#48630 GGadu

Napisane przez mgr inż. Pavulon w 11.03.2009 21:23

GGadu
Autor: Pavulon
Wersja: 0.4.2.2


Opis:
Mam nadzieje że jest to pierwszy plugin który umożliwia obsługę GG z poziomu AMXX.
Dzięki niemu mamy możliwość wysyłania wiadomości GG z jak i do gry, wyświetlenie aktualnego statusu serwera, ilości graczy oraz administracji serwera za pomocą GG.
Nie odpowiadam za żadne szkody powstałe w wyniku używania tego pluginu itd.

Instalacja:
Standardowo wrzucić plik .amxx do amxmodx/plugin oraz dopisać go do configs/plugins.ini a .sma do amxmodx/scripting
Wszystkie pliki konfiguracyjne oraz logi będą znajdowały się w katalogu amxmodx/GGadu (zalecane jest stworzenie go ręcznie i nadanie mu odpowiednich praw dostępu {np. CHMOD 777} w celu umożliwienia zapisu), lecz jeżeli przy uruchomieniu nie będzie istniał katalog to zostanie on stworzony i umieszczone w nim zostaną odpowiednie pliki(GGadu.cfg; GGadu.ini; GGadu_bans.ini; GGadu_servers.ini) {wszystko w załączniku}.

GGadu.cfg - plik z cvar'ami

;[GGadu] Umiesc w tym pliku cvar'y do plugin'a.
amx_gg_numer "0"
amx_gg_haslo "0"
amx_gg_opis_on "name w/ GG [ON]nIP: ipnMapa: mapnTimeleft: tlnGraczy: act/max"
amx_gg_opis_off "name w/ GG [OFF] mapchage ?"
amx_gg_opis_refresh "60"
amx_gg_gracze_info "abcdefgh" ;abcdefgh
amx_gg_log "bc" ;abc
amx_gg_log_typ "a" ;ab
amx_gg_losowy_serw "" ;ab
amx_gg_dzwiek "1"

Niezbędne są cvary amx_gg_numer i amx_gg_haslo. Reszty jak nie będzie to przyjmą wartości standardowe.
Konto GG należy wcześniej utworzyć np. standardowym komunikatorem gdyż nie ma opcji rejestracji z serwera.
Zasada dodawania cvar'ów dokładnie taka sama jak np. w amxx.cfg

GGadu.ini - admini gg

;[GGadu] Umiesc w tym pliku numery GG adminow wraz z ich flagami dostepu oddzielone spacjami, po jednej linijce dla admina np:
;nr_gg flagi_admina "nick" "flagi_dostepu"
;12345678 abcdefghijklmnopqrstuwvxy "SYS-OP" "bc"
;1234567 abcdefghijklmnopqrstuwvxy "ADMIN" "b"
;Srednik na poczatku oznacza ze dana linijka nie jest brana pod uwage.

Radzę zachować ten format, bez żadnych komentarzy. Flagi są takie same jak na serwerze.

GGadu_bans.ini - bany gg

;[GGadu] Dodaj w tym pliku numery gg ktore zostana zbanowane, po jednym w linijce.
;123456789
;234567890
;Srednik na poczatku oznacza ze dana linijka nie jest brana pod uwage.

Jedna linijka to jeden zbanowany numer gg, nie ma co się więcej rozpisywać.

GGadu_servers.ini - serwery CS

;[GGadu] Dodaj w tym pliku serwery wraz z opisem jaki chcesz zobaczyc po wpisaniu komendy serwery, po jednym w linijce.
;127.0.0.1:27666 Super Serwer GG: 123456789
;Srednik na poczatku oznacza ze dana linijka nie jest brana pod uwage. Maksymalna dlugosc 127 znakow

Format oraz treść wg uznania. Ograniczenie do 127 znaków na linijkę.

GGadu_system.log - log
Informacje o łączeniu, akcjach i problemach.

GGadu_DATA.log - log
Pliki tworzą się automatycznie przy odbiorze/wysyłaniu wiadomości. DATA jest w formacie rr/mm/dd

Oczywiście możemy też przekopiować odpowiedni folder z załącznika.

Wymagane moduły:
  • sockets

Konfiguracja:

Cvary:
  • amx_gg_numer "0" - numer gg z którego maja być wysyłane wiadomości
  • amx_gg_haslo "0" - haslo do tego numeru gg
  • amx_gg_opis_on "name w/ GG [ON]nIP: ipnMapa: mapnTimeleft: tlnGraczy: act/max" - opis serwera kiedy włączony
  • amx_gg_opis_off "name w/ GG [OFF] mapchage ?" - opis kiedy wyłączony
  • amx_gg_opis_refresh "60" - co ile odświeżać opis [w sekundach]
    0 = tylko przy zmianie mapy
    wartości poniżej 15 mogą spowodować block'a od serwera gg i brak zmian
  • amx_gg_gracze_info "abcdef" - które dane wyświetlać w liście graczy
    a = nr. porzadkowy gracza, b = username, c = authid
    d = ip, e = team, f = userid
  • amx_gg_log "bc" - co logować ?
    a = wiadomości przychodzące, b = rozmowy, c = funkcje
  • amx_gg_log_typ "1" - co logować w rozmowach wychodzących ?
    a = tylko steam_id, b = tylko ip, brak = tylko nick
  • amx_gg_losowy_serw "" - używać losowego serwera gg do logowania ?
    a = jesli notoperating, b = przy nieudanym pobraniu ip
  • amx_gg_dzwiek "1" - dźwięk przy otrzymaniu wiadomości ?
    1 = tak, 0 = nie

Zamienniki w opisie:
  • name == nazwa serwera
  • ip == ip serwera
  • map == aktualna mapa
  • tl == pozostały czas XXmin YYsek
  • ml == ilość minut do końca mapy
  • sl == ilość sekund do końca
  • act == ilość graczy na serwerze
  • max == maksymalna liczba graczy
  • n == enter == przejście do następnej linii

Flagi dostępu adminów w pliku:
  • "c" - Sys-Op
  • "b" - Admin
  • "a" - Admin bez powiadomienia grupowego
  • "" - bez kontaktu

Komendy:
  • say(_team) gg: nr_gg(lub nick) wiadomosc - wysyła wiadomość na dany numer gg
    nick jest nazwą(lub jej częścią) pod jaką zapisany jest dany user w pliku GGadu.ini
  • say(_team) /kontakt{/contact} - wyświetla menu kontaktu z administracja
  • amx_gg_reload_cvars - wczytuje ponownie cvar'y z flagami (ADMIN_BAN)
  • amx_gg_reload_admins - pobiera ponownie dane adminów z pliku (ADMIN_BAN)
  • amx_gg_reload_bans - pobiera ponownie bany z pliku (ADMIN_BAN)
  • amx_gg_reload_servers - pobiera ponownie serwery z pliku (ADMIN_BAN)

Jeżeli menu kontaktu ma być dostępne dla graczy po użyciu komendy amx_menu,
nalezy do configs/custommenuitems.cfg dopisać linijkę:
amx_addclientmenuitem "Kontakt GGadu" "ggk_menu" "" "GGadu"

Komendy GG:
  • pomoc = lista dostępnych komend
  • status = stan serwera: hostname, wersja amxx, ip:port, mapa, ilość graczy, pozostały czas mapy
  • gracze = lista graczy na serwerze wraz z ich danymi takimi jak IP i Steam_id
  • serwery = lista dostępnych serwerów, dane własne z pliku
  • wersja = aktualna wersja GGadu
  • chat: gracz wiadomosc = wiadomość do kogoś na serwerze
    gracz może być nick'iem (jeżeli występują spacje w nicku to podawać go cudzysłowach) gracza(lub jego częścią), adresem ip, steam_id lub #userid np:

    chat: "[you]" Pozdrowienia z GG

    dla adminów jest też możliwość pisania do wszystkich lub do danego team'u wpisując @all / @ct / @t zamiast gracza np:

    chat: @t Sprzedam pake

  • admin: komenda_admina = wykonuje zadana komendę na serwerze (#odpowiedni ADMIN wymagany#)
    numer z ktorego piszemy musi miec dodanego admina oraz niezbędne flagi do wykonania komendy np:

    admin: amx_map de_dust

  • rcon: komenda_hlds'a = wykonuje zadana komendę rcon na serwerze (#ADMIN_RCON wymagany#)
    niezbędny admin z flagą ADMIN_RCON ("l")

    rcon: restart



Dodatkowe info dostępne jeszcze w .sma




UWAGA !!!
W przypadku gdy plugin stworzył nam folder i nie możemy się do niego dostać z powodu braku praw(źle ustawiony chmod wynikający z tego że inny user{serwer} np root utworzył folder i nie dał nam praw do niego) należy wyłączyć ggadu, pobrać plugin ggadu_dir_remover i standardowo go zainstalować. Po zmianie mapy powinien on usunąć folder wraz z zawartością. Następnie tworzymy sami(kopiujemy z załącznika) folder i pliki pluginu ggadu oraz nadajemy im CHMOD'y 777 - tak aby i serwer miał do nich dostęp. Następnie wyłączamy ggadu_dir_remover, konfigurujemy i włączamy ggadu.
Problem ten pojawia się gdy użytkownik który ma dostęp do pliku nie jest użytkownikiem który uruchamia serwer, np:
użytkownik -> user
serwer -> root (root, główny user systemu, taki admin w M$ OS)
Kiedy root tworzy pliki nadaje im standardowo takie chmod'y że user może tylko je otworzyć(a folder tylko zobaczyć - nawet nie otworzy). Biblioteka amxx'a niestety jest ograniczona i nie ma możliwości wyboru czy też zmiany CHMOD'ów(a nie opłaca się rozprowadzać zmienionej biblioteki dla jednego pluginu) dlatego jak stworzymy sami plik to będzie można go edytować i wszytko będzie działać, lecz gdy serwer stworzy plik typu log to niestety edytować już go nie będziemy mogli.



p.s.
Not4Newbie :P

Załączone pliki


  • +
  • -
  • 17


#163670 Dynamiczny HUD

Napisane przez R3X w 24.08.2010 22:55

Dynamiczny HUD
dHUD.inc
v.1.03

Temat w budowie, stworzenie dokumentacji potrwa pewnie dłużej niż pisanie kodu :P
Tymczasem angielski opis wszystkich funkcji można znaleźć w pliku .inc

Dołączona grafikaDemonstracja

Eksperymentalna biblioteka do tworzenia różnych efektów na wiadomościach HUD. Jej głównym (lecz nie jedynym) zadaniem jest zautomatyzowanie ruchu i zmian koloru wyświetlanych komunikatów.



Plugin udostępnia szereg funkcji do pracy z efektami. Podstawowe operacje odbywają się na pojedynczych klatkach animacji, jak we flashu. Tak też wyświetlana jest wiadomość - klatka po klatce - zastąpienie napisu jego kopią w innym miejscu czy kolorze stworzy wrażenie ruchu i przekształceń kolorystycznych.

Download



Instalacja
Plik dHUD.sma należy skompilować i zainstalować na serwerze. Plugin korzystający z efektów skompiluje się wyłącznie lokalnie z dostępem do dHUD.inc.


Interfejs

Wszystkie udostępniane funkcje mają prefiks DHUD_*.

Pierwsze co trzeba zrobić to stworzyć 'obiekt' dhud. DHUD_create() zwraca uchwyt, którego używa się z pozostałymi funkcjami. Można utworzyć kopię istniejącego obiektu przez podanie jego uchwytu DHUD_create(dhud) [działa to podobnie jak konstruktor kopiujący w językach obiektowych].


Animację możemy zaprojektować manualnie przypisując właściwości każdej klatce z osobna (dHUD_test -> dhud) lub użyć filtrów (dHUD_test -> dhud3).

  • klatka po klatce
Wystarczy kilka wywołań DHUD_setFrame, każde przypisze kolor i położenie napisu tworząc animację

DHUD_setFrame(dhud, frame, iColor[3], Float:x, Float:y, iLen = 1);
dhud - uchwyt
frame - numer klatki, zaczynają się od 0, w przypadku numeru większego niż liczba dostępnych akurat klatek animacja zostaje wypełniona pustymi klatkami aż do podanego rozmiaru
iColor[3] - kolor napisu
x, y, - położenie napisu
iLen - długość klatki; w miejsce dwóch identycznych klatek z iLen=1 można dać jedną z iLen=2




  • filtry

Filtry służą do przetwarzania kilku klatek zgodnie z danym algorytmem.

DHUD_applyFilter(dhud, const szFilter[], startFrame, endFrame, Float:dx=D_LONG, Float:dy=D_ZERO, any:...)
dhud - uchwyt
szFilter[] - nazwa filtra, lista dostępnych jest drukowana po użyciu komendy "dhud info" przez admina z flagą od konfiguracji (H)
startFrame, endFrame - przedział klatek
dx, dy - przyrost wartości x i y, przydatne w funkcjach, funkcja realizująca filtr otrzymuje współrzędne x i y, z których może wyliczyć nowe położenie (przykład z sinusem w dHUD_test), każda ramka dostaje wartości x<poprzedniej ramki> + dx i y<poprzedniej ramki> + dy
any:.. dodatkowe parametry filtrów, opisane także w "dhud info"



Dwoma podstawowymi filtrami dHUD są SetPosition i SetColor. Dzięki nim, możemy ustawić kolor i położenie w wielu klatkach jednocześnie.

SetPosition ustawia podaną pozycję wszystkim klatkom z zakresu startFrame-endFrame
SetColor ustawia podany kolor wszystkim klatkom z zakresu startFrame-endFrame

Ten kod ustawi dhud długości 50 klatek w pozycji 0.5 0.5 w kolorze białym (255, 255, 255)
DHUD_setFrame(dhud, 50, {0,0,0}, 0.0, 0.0);
DHUD_applyFilter(dhud, "SetPosition", 0, 50, D_ZERO, D_ZERO, 0.5, 0.5);
DHUD_applyFilter(dhud, "SetColor", 0, 50, D_ZERO, D_ZERO, 255, 255, 255);



Jak już zbudujemy animację nadejdzie mement na wyświetlenie jej graczowi:
DHUD_display(id, dhud, Float:fInterval = 0.1, channel = 4, const szMessage[], any:...)
id - id gracza lub 0 - do wszystkich
dhud - uchwyt
fInterval - długość trwania klatki w sekundach; czas od pokazania pewnej ramki do następnej mnożony przez wartość iLen klatki
channel - kanał HUD, 1-4
szMessage[], ... - wiadomość; można użyć ciągów formatujących; %L + LANG_PLAYER z id = 0 niestety nie zadziała! może w przyszłym wydaniu


Forward
W momencie zakończenia animacji wykonywany jest forward
forward fwStopAnimation(id, dhud, bool:finished);

czyli w pluginie można dopisać publiczną funkcję, która zareaguje na to zdarzenie
public fwStopAnimation(id, dhud, bool:finished){}

parametr finished jest ustawiany na true, kiedy animacja zostanie zakończona zgodnie z planem i false jeśli zostanie zatrzymana/zastąpiona nową


Historia

1.03
- poprawione: rejestrowanie filtrów z parametrami w zewnętrznych pluginach

1.02
- poprawione: pierwsza ramka wyświetlana bez opóźnienia
- poprawione: forward wykonywany dokładnie w momencie końca animacji (a nie po puszczeniu ostatniej klatki)
- dodane: ustawienie iLen na 0 usuwa klatkę z animacji
- dodane: stock DHUD_removeFrames
- dodane: stock DHUD_removeAllFrames

1.01
- poprawa interfejsu
- dodane: czyszczenie nieużywanych tablic Array:
- dodane: forward onStopAnimation
- dodane: komenda "dhud info"

1.0
- pierwsza, nie publikowana szerzej wersja
  • +
  • -
  • 37


#215024 Błędy przy komplikowaniu

Napisane przez beny366 w 12.02.2011 12:07

Jak działą to daj chociaż + pijawo...
  • +
  • -
  • 1


#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


#200786 Magazyn na perki v2.2

Napisane przez Goliath w 29.12.2010 12:07

Dołączona grafika
Ten plugin umożliwia przechowywanie kilku perków w specjalnym magazynie. Po wpisaniu na czacie /magazyn, otwiera się menu, w którym możemy włożyć, wyjąć, zamienić lub usunąć dany perk (raz włożonego perku, nie będzie można wyjąć do końca rundy).
Dodałem zapis na nVault, więc po wyjściu i ponownym wejściu na serwer, perki w magazynie zostaną (można zmienić w konfiguracji pluginu).

Dołączona grafika
say /magazyn - otwiera menu magazynu

Dołączona grafika
1. Jeżeli jeszcze tego nie zrobiliśmy, dokonujemy zmiany z tego tematu: [CoD Nowy] Naprawa natywu cod_get_user_perk - AMXX.pl: Support AMX Mod X
2. Otwieramy plik cod_magazyn.sma i dokonujemy konfiguracji pluginu:
Spoiler

3. Kompilujemy plik cod_magazyn.sma.
4. Wrzucamy skompilowane pluginy na serwer (jakby ktoś nie wiedział, to do katalogu amxmodx/plugins).
5. Dopisujemy do plugins.ini (lub plugins-codmod.ini, Wasza wola Dołączona grafika):
cod_magazyn.amxx

Dołączona grafika
Aktualna wersja (v2.2):
Spoiler


Starsze wersje:
Spoiler

  • +
  • -
  • 39


#158708 3 pytania odnosnie amxx'a

Napisane przez DarkGL w 09.08.2010 17:39

2.cur weapon
set_pev( id , pev_viewmodel2 , "models/WesternMod/v_scout.mdl")
taki przykład
3.tak ale tylko na steam
get_user_info
  • +
  • -
  • 1


#158710 3 pytania odnosnie amxx'a

Napisane przez Knopers w 09.08.2010 17:44

1. get_cvar_float("amx_timeleft");
2.


//Zmiana modelu z przedrostkiem "p_"
set_pev(id, pev_weaponmodel2, "Sciezka do modelu");
//Zmiana modelu "v_"
set_pev(id, pev_viewmodel2, "Sciezka do modelu");

3.
Tylko Steam za pomocą : AMX Mod X - Half-Life Scripting for Pros!

3.tak ale tylko na steam
get_user_info



get_user_info działa też na ns :P
  • +
  • -
  • 1


#157016 Pytanie odnosnie bazy nvault

Napisane przez DarkGL w 03.08.2010 18:58

teraz to cię nie zrozumiałem ale na przykładzie mt2 korzystamy w nim z 4-6 różnych plików nvault nawet nie wiem czy używamy tam nvault_close ;F ale zobacz sobie dowolną
funkcję zapisz_ lub wczytaj_ i powinieneś wiedzieć o co chodzi a jak nie chce ci się to tak
gdy zapisujesz dane do vault podajesz wskaźnik na plik czyli właśnie to co tworzysz w plugins_init następny argument to klucz musi on być unikalny chyba że chcesz nadpisać dane
to właśnie klucz daje ci możliwość wczytania danych następny argument to tablica z tekstem do zapisu a teraz odczyt
jak chcesz wczytać vault to podajesz znów wskaźnik do pliku (plugins_init) klucz który gwarantuje odczyt danych chyba że klucza nie będzie w pliku wtedy zwróci nic no i dalej tablica gdzie zostanie upchany odczytany tekst musisz go potem ogarnąć pare i str_to_num


ot cała filozofia zresztą zobacz w mt2
  • +
  • -
  • 1


#156988 Pytanie odnosnie bazy nvault

Napisane przez G[o]Q w 03.08.2010 17:39

to jest tak samo jak normalnie odczytujesz zapisujesz tylko robisz to pare razy zmieniajac rdzen klucza
  • +
  • -
  • 1


#156970 Pytanie odnosnie bazy nvault

Napisane przez G[o]Q w 03.08.2010 16:16

hmm nie jestem pewien ale mozliwe ze aby korzystac z innego pliku vault musisz zamknac inne otwarte dlatego lepiej zrobic 1 plik i w nim 4 rodzaje kluczy np wynik-id kille-id i tak dalej przy czym id to nick/sid lub ip
  • +
  • -
  • 1


#155189 Jak na biezaco sprawdzac ile osob zabil gracz?

Napisane przez Knopers w 27.07.2010 16:17

Event DeathMsg i własne zmienne
  • +
  • -
  • 1


#153221 Problem z menu

Napisane przez GwynBleidD w 20.07.2010 23:21

Pokaż resztę kodu. W jakim evencie to zastosowałeś? Co do tego kodu poprawiłbym go na taki:

if(Aspirina > Ketonal && Aspirina > Red Bull) {
new Players[32],Num
get_players(Players,num)
for(new i=0;i<Num;i++) {
new id=iPlayers[i]
if(get_user_team(id)==2)
{
menuaspiryny(id)
}
if(get_user_team(id)==1)
{
menuprzegranych(id)
}
}
}

  • +
  • -
  • 1


#153454 Pare pytan

Napisane przez GwynBleidD w 21.07.2010 20:14

ad 1. Jeśli chodzi Ci o wstrzymanie zmiany mapy, patrz punkt 3. Jeśli o wstrzymanie wyświetlenia się tabeli wyników zwiększ timelimit

ad 2. Tuż przed. Podczas zmiany mapy wykonywany jest plugin_init

ad 3. cvar mp_chattime (amx przed zmianą mapy zmniejsza jego wartość o 2 sekundy, weź na to poprawkę)
  • +
  • -
  • 1


#152729 [problem] hudmessage miga

Napisane przez hardbot w 19.07.2010 08:29

i last pytanie. Jezeli chce ustawic zeby tylko dany gracz to widzial to musze dac:

 set_task(1.0, "Pokaz",id,"",0,"b") 

??

Nie wpisuj tego w taska :P wystarczy tak:

public Pokaz()
{
set_hudmessage(42, 85, 255, 0.44, 0.03, 0, 1.0, 1.0, 0.1, 0.2, 13.0)
show_hudmessage(id, "Trwa runda rozgrzewkowa")

return PLUGIN_CONTINUE
}



#152718 [problem] hudmessage miga

Napisane przez hardbot w 19.07.2010 08:01

To powinno zniknąć za 13 sec
#include <amxmodx> 

public plugin_init()
{
register_plugin("HUD","0.1","[H]ARDBO[T]")
set_task(1.0, "Pokaz",0,"",0,"b")
return PLUGIN_CONTINUE
}
public Pokaz()
{
set_hudmessage(42, 85, 255, 0.44, 0.03, 0, 1.0, 1.0, 0.1, 0.2, 13.0)
show_hudmessage(0, "Trwa runda rozgrzewkowa")

return PLUGIN_CONTINUE
}