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
 

ToJaTwojTelefon - zdjęcie

ToJaTwojTelefon

Rejestracja: 09.02.2010
Aktualnie: Nieaktywny
Poza forum Ostatnio: 17.11.2017 22:33
-----

#477125 Informacje wstępne, czyli Jak zacząć Scripting AMXX

Napisane przez Gość w 09.11.2012 19:47

Tutorial dla początkujących
Informacje wstępne
Scripting AMXX


[kotwica='cel']Cel[/kotwica]
Nauka tworzenia pluginów AMXX

Wymagania
  • Znajomość obsługi AMXX
  • Umiejętność programowania
  • Podstawowa znajomość Pawna
  • Racjonalne tworzenie algorytmów
  • Umiejętność korzystania z manuala
  • Edytor Pawna wraz z kompilatorem AMXX
[kotwica='wstep']Wstęp[/kotwica]
Na samym początku zadajmy sobie pytanie: czym są pluginy AMXX i jak działają.

Pluginy AMXX to algorytmy modyfikacji rozgrywki na serwerach HLDS, pisane w języku Pawn,
zrozumiałym dla ludzi i zapisywane pod postacią plików SMA, które w wyniku kompilacji przybierają
postać kodu niezrozumiałego dla człowieka, ale zrozumiałego dla AMXX, zapisywane pod postacią
plików AMXX, które komunikują się z serwerem HLDS poprzez Metamoda:P, zmieniając rozgrywkę.

[kotwica='istota']Istota[/kotwica]
Tym samym, plugin komunikuje się z Metamodem:P, a Metamod:P z silnikiem gry (serwerem HLDS).
Musimy pamiętać, że każda wymiana informacji pomiędzy serwerem a silnikiem gry, zużywa liczne
zasoby sprzętowe i należy zadawać możliwie jak najmniej zapytań do silnika gry poprzez Metamoda:P.

[kotwica='plugins_ini']Plugins.ini[/kotwica]
Plik plugins.ini zawiera listę pluginów, które zostaną załadowane do AMXX i będą wykonywać swoje
algorytmy, komunikując się z serwerem HLDS poprzez MetaModa:P, modyfikując przebieg gry.

Jednak kolejność pluginów wpisanych w pliku plugins.ini nie jest bez znaczenia.
Zwróćmy teraz uwagę na sposób działania AMXX, czyli interakcję z serwerem gry.
AMXX pozwala nam, poprzez MetaModa:P, na następujące operacje:
  • Zarejestrowanie danego zdarzenia czy wartości (np. odczytanie liczby pieniędzy danego gracza, czy zaobserwowanie wybuchu bomby)
  • Modyfikowanie danego zdarzenia czy wartości (np. zmiana punktów życia danego gracza, czy przedłużenia czasu trwania oślepienia)
  • Zablokowanie danego zdarzenia czy usunięcie wartości (np. brak obrażeń od granatów, czy usunięcie limitu posiadanych dolarów)
  • Wywołanie danego zdarzenia (np. zabicie gracz, teleportacja gracza na respawn wrogów, czy pozbawienie gracza jego broni)
  • Tworzenie danego zdarzenia czy wartości (np. zabicie vipa lub ucieczka terrorystów, czy stworzenie nowych cvarów)
Tym samym, poszczególne pluginy mogą być od siebie zależne, a ich kolejność ma znaczenie.
Należy zatem zwracać uwagę na kolejność pluginów w pliku plugins.ini, przy czym algorytmy
kolejnych pluginów, od góry pliku plugins.ini, wykonywane są proporcjonalnie sekwencyjnie.

Przykładowo, jeśli w pluginie pierwszym od góry pliku plugins.ini, zablokujemy możliwość mówienia,
to w pluginie drugim od góry, nie zostanie zarejestrowane powiedzenie na sayu określonej wartości.
W odwrotnej kolejności tych pluginów w pliku plugins.ini zaś, będzie to z kolei możliwe do wykonania.

[kotwica='AMXMODX']AMXMODX[/kotwica]
Pierwszą, podstawową biblioteką, jaką będziemy musieli załączyć do naszego pluginu, jest AMXMODX.
W tym celu, dodajemy na samej górze naszego kodu SMA następującą linijkę kodu
#include <amxmodx>


AMXX posiada parę publicznych, predefiniowanych funkcji, a oto one:

[kotwica='plugin_natives']plugin_natives[/kotwica]
Ta funkcja wywoływana jest jako pierwsza, tuż po załadowaniu pluginu do pamięci AMXX.
W niej należy zainicjować wszelkie natywy do współpracy z innymi pluginami, czyli sprawić,
by możliwa była kompleksowa komunikacja pomiędzy funkcjami poszczególnych pluginów.

Jak już pisałem, funkcje ładowane są kolejno, od góry pliku plugins.ini, tak więc kolejność jest istotna.

[kotwica='plugin_precache']plugin_precache[/kotwica]
Ta funkcja wywoływana jest po załadowaniu wszytkich pluinów z natywami, lecz jeszcze przed pełnym zainicjowaniem
serwera HLDS i to w niej należy zarejestrować wszelkie wymagane do pobrania przez Użytkowników pliki niestandardowe,
z których będzie korzystał plugin, by powiadomić klienta gry o konieczności pobrania tych plików przed ustaleniem połączenia.

W tej właśnie funkcji należy zarejestrować wszelkie modyfikatory skryptów startowych serwera HLDS, by móc
w nie ingerować, zanim zostaną załadowane i wykonane skrypty startowe, uniemożliwiając ich identyfikację.

[kotwica='plugin_init']plugin_init[/kotwica]
Ta funkcja wywoływana jest podczas inicjalizacji pluginu, po pełnym załadowaniu funkcji startowych serwera.
W tej funkcji należy zarejestrować nasz plugin przy użyciu funkcji register_plugin o następujących parametrach
register_plugin(const plugin_name[], const version[], const author[])

Warto zidentyfikować plugin w celu późniejszego testowania stanu pluginu i odnalezienia go na liście pluginów.
Składnia argumentów funkcji nie wymaga chyba większego komentarza, w przypadku wątpliwości zapraszam do manuala.

[kotwica='przyklad']Przykład[/kotwica]
Na tym etapie, potrafimy już stworzyć i zarejestrować pierwszy plugin, nie robiący praktycznie nic.
#include <amxmodx>

public plugin_init(){
register_plugin("Nauka AMXX", "0.1", "benio101");
}
Przypomnijmy, w pierwszej linijce zaimportowaliśmy wymaganą zawsze dla AMXX, bibliotekę amxmodx.
W trzeciej linijce zainicjowaliśmy publiczną funkcję plugin_init, wykonywaną po pełnym załadowaniu skryptów startowych HLDS.
Przypominam, że funkcja plugin_init winna być funkcją publiczną, inaczej może nie zostać ona wykonana w oczekiwanym momencie.
W czwartej linijce, rejestruję plugin i na tym kończy się działanie naszego testowego pluginu, który praktycznie nie zmienia rozgrywki.

W funkcji plugin_init należy także zarejestrować wszelkie nasłuchiwacze zdarzeń, jak śmierć gracza, czy nowa runda.

[kotwica='plugin_cfg']plugin_cfg[/kotwica]
Ta funkcja wywoływana jest tuż po plugin_init i służy konfiguracji pluginu, m.in. pobraniu zmiennych globalnych z silnika gry,
ustanowieniu połączenia z bazą danych, czy pobrania innych, istotnych danych do współpracy pluginu z zasobami zewnętrznymi.

[kotwica='register_event']register_event[/kotwica]
Pierwsza z funkcji, którą poznamy, pozwala na przechwycenie wybranych zdarzeń, które dokonywane są na serwerze.
Tutaj odwołuję do niezwykle istotnej strony, na której wypisane są zdarzenia silnika HLDS wraz z argumentami:

Half-Life 1 Game Events

Teraz spróbujemy przechwycić funkcję śmierci, w tym celu musimy zarejestrować w funkcji plugin_init nasłuchiwacz tego zdarzenia
register_event("DeathMsg", "DeathMsg", "a");
Pierwszy parametr, zgodnie z dokumentacją, oznacza nazwę zdarzenia.
Drugi parametr oznacza funkcję publiczną, która będzie wywoływana w momencie wystąpienia tego zdarzenia. Trzeci parametr
wynosi "a", gdyż DeathMsg jest eventem globalnym. Tym samym utworzymy sobie funkcję publiczną DeathMsg i damy zabójcy 200$.

[kotwica='read_data']read_data[/kotwica]
Jak możemy wyczytać z powyższego linku, DeathMsg posiada cztery argumenty. Nam wystarczy pierwszy argument, czyli id zabójcy.
public DeathMsg(){
	new killer=read_data(1);
}
Funkcja DeathMsg wywoływana jest w momencie wystąpienia zdarzenia śmierci.
Za pomocą funkcji read_data możemy odczytać dany parametr funkcji, ponieważ pierwszy argument
to numer identyfikacyjny zabójcy, ten właśnie numer pobierzemy i zapiszemy do nowo utworzonej zmiennej killer.
Teraz będziemy chcieli nagrodzić zabójcę, przekazując mu dodatkowe 200 dolarów za zabójstwo.
W tym celu, skorzystamy z funkcji z biblioteki cstrike, cs_set_user_money.

[kotwica='import_biblioteki']Import biblioteki[/kotwica]
Aby móc skorzystać z tej funkcji, musimy najpierw zaimportować kolejną bibliotekę,
w tym celu dodajemy do naszego kodu następującą linijkę (najlepiej pod bilioteką amxmodx)
#include <cstrike>
Przypomnijmy, jak powinien wyglądać nasz obecny, pełny kod:
#include <amxmodx>
#include <cstrike>

public plugin_init(){
register_plugin("Nauka AMXX", "0.1", "benio101");

register_event("DeathMsg", "DeathMsg", "a");
}

public DeathMsg(){
new killer=read_data(1);
}


[kotwica='sprawdzenie_obecnosci_gracza']Sprawdzenie obecności gracza[/kotwica]
Teraz dochodzimy do niezwykle istotnej rzeczy, którą musisz zapamiętać raz na zawsze!
Operując na jakimkolwiek graczu, upewnij się, że gracz może zostać danej operacji poddany.
W przykładzie, chcemy dodać pieniądze graczowi, jednak zanim to zrobimy, musimy się upewnić,
czy gracz jest jeszcze na naszym serwerze. Zawsze mógł rzucić granat, wyjść z serwera, a opiero po chwili
nastąpi zdarzenie śmierci. Co się stanie przy próbie dodania pieniędzy graczowi, którego nie ma na serwerze?
Na pewno jest to niepotrzebne zapytanie do silnika gry, dużo większe zużycie zasobów sprzętowych, a także stale
powiększające się logi błędów. Na dłuższą metę, takie właśnie błędy skutkują dużymi lagami bądź crashami serwera.

Tym samym, użyjemy funkcji is_user_connected, w celu sprawdzenia, czy gracz jest jeszcze na serwerze.
Pamiętajmy, że aktualnie killer reprezentuje numer identyfikacyjny zabójcy, jednak w różnych funkcjach, możemy różnie
identyfikować poszczególne byty czy zdarzenia. Przy okazji, każdy byt na mapie ma swój własny, unikalny numer identyfikacyjny,
jednakże numerem identyfikacyjnym gracza jest numer z zakresu od 1 do maksymalnej liczby graczy włącznie. Tym samym, numer
bytu, będący większy lub równy 1 i nie większy, niż maksymalna liczba graczy na serwerze, oznacza na pewno gracza. (niekoniecznie online!)

public DeathMsg(){
new killer=read_data(1);
if(is_user_connected(killer)){
// Dodawanie pieniedzy
}
}
Teraz skorzystamy z natywów biblioteki cstrike i dodamy zabójcy 200 dolarów.
cs_set_user_money(killer, cs_get_user_money(killer) + 200);

Jak można zauważyć, nie mamy wprost funkcji dodającej pieniądze. W związku z tym,
musimy jako drugi parametr funkcji cs_set_user_money podać sumę 200
i obecnej liczby dolarów gracza, pobieranej przy użyciu funkcji cs_get_user_money

[kotwica='zwracana_wartosc']Zwracana wartość[/kotwica]
W nowo utworzonej funkcji DeathMsg, zwrócimy na końcu odpowiednią wartość.
Dostępne wartości do zwrócenia:

PLUGIN_CONTINUE
Domyślna wartość, przerywająca dalsze wywołanie funkcji, jednak przez każdy inny plugin, a także silnik gry,
zdarzenie zostanie wywołane. Po prostu nic niżej od tego polecenia nie zostanie wywołane w tej danej jednej funkcji.

PLUGIN_HANDLED_MAIN
Dalsze wywołanie funkcji nie będzie możliwe, podobnie, jak w przypadku PLUGIN_CONTINUE, dalej wszystkie
pluginy będą mogły odnotować tę funkcję, jednak event ten zostanie zablokowany dla silnika właściwego gry.

PLUGIN_HANDLED
Dalsze wywoływanie funkcji zostanie przerwane, a ani silnik gry nie odnotuje tego eventu, ani, w przeciwieństwie
do PLUGIN_HANDLED_MAIN, żaden z kolejnych pluginów, wypisanych poniżej od tego obecnego w plugins.ini.

Nam wystarczy PLUGIN_CONTINUE, bowiem nie chcemy blokować śmierci w silniku, ani pozbawiać informacji o śmierci
kolejnych pluginów. Na koniec zmienimy nazwę pluginu na odzwierciedlającą rzeczywiste zastosowanie pluginu. Gotowy kod:
#include <amxmodx>
#include <cstrike>

public plugin_init(){
register_plugin("Dodatkowe 200 dolarow za zabojstwo", "0.1", "benio101");

register_event("DeathMsg", "DeathMsg", "a");
}

public DeathMsg(){
new killer=read_data(1);
if(is_user_connected(killer)){
cs_set_user_money(killer, cs_get_user_money(killer) + 200);
}
return PLUGIN_CONTINUE;
}

Tym samym, właśnie napisaliśmy swój pierwszy plugin, który daje dodatkowe 200 dolarów za zabójstwo.


Tutorial napisany, choć z drobnym opóźnieniem, z okazji Światowego Dnia Jakości.
Jeśli przypadnie on Wam do gustu, to mogę pokusić się w wolnym czasie o napisanie kolejnych
części, jako kontynuację, z rozwinięciem wątku i coraz bardziej zaawansowanymi przykładami Scriptingu.


#477231 Zakup nowego komputera

Napisane przez Ojciec Dyrektor w 09.11.2012 21:53

może to Cię trochę zaciekawi. W maju szukałem odpowiedniego kompa dla brata i napisałem na forum komputerowym.
W prawdzie nie jest z procesorem AMD ale brat korzysta (gry tj GTA IV, CS, nfs shift, bf3) i działa bez problemu.
http://www.forumpc.p...l=&fromsearch=1
Nie zaciął się jeszcze ani razu, windows7 śmiga bez problemu :)
  • +
  • -
  • 1


#477178 Zakup nowego komputera

Napisane przez NaaPigulach w 09.11.2012 21:22

Jak się na składaniu nie znasz to zaproponuje ci komputerek z alegro sam mam takie 3 w domu i spisują się świetnie.

Komputer Fujitsu P400 i3-2120 8GB 500GB Mysz+Klaw (2779936930) - Allegro.pl - Więcej niż aukcje. Najlepsze oferty na największej platformie handlowej.

Sam się zastanawiam nad kupnem tego

http://allegro.pl/te...2745950177.html

Mógłbym złożyć ale nie mam czasu.


#469010 Ultimate AFK

Napisane przez Droso w 18.10.2012 15:26

Witajcie!
opis

Autor: HubertTM
Dzień publikacji: 18 października 2012r.

Oto nowy Ultimate-AFK, czym różni się od innych afk-kickerów? Dokładnością. Ten plugin bierze pod uwage:

  • strzelanie;
  • poruszanie camera;
  • pisanie na chacie;
  • drobne ruchy;
  • kucanie;
  • skakanie;
  • patrzenie w tabele wyników;
  • przeładowanie;
  • kupowanie broni na respie;
  • wiele innych.

Oczywiście wszystko możemy Włączyć/Wyłączyć Cvarami, a w dodatku możemy dodać wyjątki dla kogo ma nie działać U-AFK:

  • dla Adminów;
  • tylko dla Head-Adminów;
  • U-AFK będzie działać tylko od określonej CVAR'em liczby graczy.

 

Możemy określić jak ma działać plugin czy od razu kickować z serwera, czy może najpierw przenieść do drużyny Obserwatorów, potem po upłynięciu X czasu, kickować go z serwera (Można oczywiście to wyłączyć, że tylko przenosi do drużyny Obserwatora i gracz sobie spokojnie czeka jako obserwator).
Możemy także ustalić po jakim czasie kickować z TT/CT i oddzielny czas kicku dla drużyny Obserwatora.
Możemy włączyć tylko kickowanie z drużyny Obserwatora.

Dodatkowo:
AFK na respie, jak wiadomo czasami chcemy, żeby AFK na respie było szybsze, tak też tu jest.
Jak działa plugin na respie?
Najpierw ustalamy ile razy gracz może być AFK (w pluginie zwie to się szanse [stand. 3])
Jeżeli gracz wykorzysta szanse [np. 3/3] to wtedy:
w zależności od CVAR'u:

  • kickuje;
  • przenosi do drużyny Obserwatora.

Możemy CVAR'em włączyć informowanie gracza, że jest AFK i nastąpi reakcja pluginu.
W pluginie jest pokazywanie ile graczy w CT i TT jest AFK [np. AFK CT: 1 AFK TT: 3] [można wyłączyć CVAR'em]

Mamy także wyrzucanie bomby, jeśli gracz jest AFK X sec..
Oczywiście możemy to wyłączyć, na przykład zamiast wyrzucania bomby możemy zainstalować to:
http://amxx.pl/topic...k-bomb-tranfer/

 

Więcej informacji w CVAR'ach ;)

cvary
Uwaga CVAR'y ustalamy w pliku ultimateafk.cfg, który możemy pobrać z załącznika i wrzucamy go do folderu
addons/amxmodx/configs

 

afk_mode 0
// 1 - Kickuje od razu, to znaczy - nie przenosi na spect!
// 0 - Najpierw przerzuca na Spect. Co dalej? Wybierz dalej w cvarach 


afk_timeafk 50
// Ile sekund mozna byc AFK w TT/CT, zanim... (cvar afk_mode)


afk_timespect 0
// Ile sekund mozna byc AFK w druzynie Obserwatorow, potem kickuje!
// 0 - Nieskonczonosc - nie kickuje.


afk_saychangeafk 2
// Czy pisanie na SAY/SAY_TEAM wplywa na czas AFK?
// 0 - Nie
// 1- Tylko w druzynach TT oraz CT
// 2 - Wszedzie TT/CT/Obserwatorzy.


afk_shootchangeafk 1
// Czy strzal bronia, lub jej zmiana wplywa na AFK?
// 1 - Tak.
// 0 - Nie.


afk_adminafk 0
// Czy traktowac adminow jako zwyklych graczy? Czytaj - Przerzucac oraz Kickowac?
// 0 - Bedzie kickowalo/przerzucalo adminow i graczy.
// 1 - Kickuje/przerzuca tylko graczy, admini maja spokoj.
// 2 - Kickuje/przerzuca graczy i adminow, ale nie kickuje adminow z immunitetem.


afk_warn 1
// ostrzegac gracza ze jest AFK? (Chat)
// 0 - Nie
// 1 - Tak (Domyslnie)


afk_minplayers 0
// od ilu graczy na serwerze dziala U-AFK.


afk_checkspawn 1
// Czy ma sprawdzac czy gracz jest AFK na respie? Takie AFK na respie dziala szybciej, przydatne bo sa szanse (patrz nizej).
// 1 - Tak
// 0 - Nie. Wylacza takze szanse (Zaraz sie dowiesz co to takiego)


afk_timekillspawn 25
// Jezeli gracz nie rusza sie na respie przez tyle sekund, oznacza to, ze jest AFK, i mozna go ... (CVAR nizej)


afk_killspawn 0
// Do cvaru wyzej
// 1 - Zabic
// 0 - Nic nie robi z graczem, ale pokazuje komunikat, ze gracz jest AFK.


afk_killspawnchance 5
// Jezeli zostanie zabity (Wiec dziala tylko kiedy cvar afk_killspawn 1) przez Ultimate AFK [TEN_CVAR] razy to zostanie wywalony, bo nie gra.
// Zalecane 3 w gore.
// Uwaga 0 nie wylacza ! (Od wylaczania jest m.in cvar afk_checkspawn!) 




afk_bombdroptime 20
// Po jakim czasie AFK ma wyrzucic bombe graczowi na ziemie.
// 0 - Wylacza.


afk_playersinfoafk 1 
// Czy ma pojawiac sie informacja? AFK TT : x AFK CT: x na chacie?
// 1 - Tak.
// 0 - Nie.

Plugin posiada multilanguage! Dzięki czemu obcokrajowcy zrozumieją, dlaczego np. zostali wyrzuceni z serwera :)
Na razie tylko PL i ANG. [Wersja ANG, możliwe lekkie błędy ;D]
 

Podziękowania:
- Dla autora/ów AFK-KISS, (zapożyczona funkcja: ta od rozpoznawania czy gracz ma bombe)


Changelog:
18 października 2012 r - publikacja;
28 października 2012 r - poprawa .txt;
20 grudnia 2012 r - poprawa małych bugów + "uczulenie" pluginu;

1.9b - 13 października 2013 r - "uczulenie" pluginu + poprawy błędów.

1.9f - 10 listopada 2013 r - Poprawienie kilku błędów - ładniejszy (czytelniejszy) plik .CFG :)

2.0 - 30 grudnia 2013 r -

  • Dodanie do AFK - Freezetime - czyli w tym czasie nie nalicza AFK :)
  • Wiele poprawek związanych z wyrzucaniem bomby.
  • Bugi i poprawki;
  • Dodanie komendy debugguj ;)
  • Poprawa jednego CVAR'a.

 

download

Załączony plik  AFK-Ultimate.sma   15,62 KB  1577 Ilość pobrań
  AFK-Ultimate.amxx

Załączony plik  ultimateafk.txt   2,29 KB  2105 Ilość pobrań

Załączony plik  ultimateafk.cfg   2,05 KB  1562 Ilość pobrań

 

 

instalacja
Standardowa czyli:

  • .amxx do plugins
  • .sma do scripting
  • ultimateafk.cfg do configs
  • ultimateafk.txt do data/lang

  • +
  • -
  • 48


#445586 WCK - Weapon Create Kit

Napisane przez Fili:P w 13.08.2012 14:40

opis
Udostępniam prosty zestaw natywów, przydatnych w tworzeniu, a raczej modyfikowaniu istniejących broni. Jeżeli macie propozycję nowych funkcji to walcie czekam xD. Plugin dopisujemy na górze plugins.ini. Nie ma on pliku .inc, jeżeli chcemy użyć jegop natywu to po prostu na górze pluginu dajemy np.
native wck_get_sequence_time(ilosc_klatek, ilosc_fps);



Bibliografia
1. Test Page for the SSL/TLS-aware Apache Installation on Web Site
2. Zombie-Mod.ru :: Zombie Mod Community

wck_give_weapon(id_gracza, id_broni, ilosc_amunicji) - dodaje graczowi broń z określoną ilością amunicji, używa fm_give_item, przykładowe wywołanie:
wck_give_weapon(id, CSW_AWP, 10);


wck_sell_weapon(id_gracza, id_broni, ilosc_amunicji, Float:mnoznik_ceny) - sprzedaje graczowi broń za standardowy koszt broni * mnoznik_ceny, używa cstrike i fm_give_item z fake util. Przykład użycia:
wck_sell_weapon(id, CSW_AWP, 10, 1.0);


wck_get_weapon_full_name(id_broni, nazwa_tablicy, dlugosc_tablicy) - pobiera do tablicy pełną nazwę broni. Przykład użycia:
wck_get_weapon_full_name(CSW_AWP, szAwpName, 127);


wck_get_ammo_full_name(id_amunicji, nazwa_tablicy, dlugosc_tablicy) - pobiera do tablicy pełną nazwę amunicji. Przykład użycia:
wck_get_ammo_full_name(9, szAmmoName, 127);


wck_get_weapon_ammo_name(id_broni, nazwa_tablicy, dlugosc_tablicy) - pobiera do tablicy pełną nazwę amunicji z konkretnej broni. Przykład użycia:
wck_get_weapon_ammo_name(CSW_AWP, szAmmoAwpName, 127);


wck_get_weapon_ammo_id(id_broni) - zwraca id amunicji w konkretnej broni. Przykład użycia:
new awp_ammo = wck_get_weapon_ammo_id(CSW_AWP);


wck_get_weapon_cost(id_broni) - zwraca koszt broni o konkretnym id. Przykład użycia:
new wpn_cost = wck_get_weapon_cost(CSW_AWP);


wck_get_ammo_cost(id_amunicji) - zwrace koszt amunicji o konkretnym id. Przykład użycia:
new ammo_cost = wck_get_ammo_cost(9);


wck_get_weapon_clip(id_broni) - zwraca wielkość magazynku w broni o konkretnym id ( wielkość standardową nie zmodyfikowaną, planuję wprowadzić możliwość modyfikacji w najbliższym czasie ). Przykład użycia:
new awp_clip = wck_get_weapon_clip(CSW_AWP);


wck_get_weapon_ammo_max(id_broni) - zwraca maksymalną ilość naboi w broni. Przykład użycia:
new awp_ammomax = wck_get_weapon_ammo_max(CSW_AWP);


wck_set_weapon_model(id, onground, v[], p[], w[])
/*
index
jezeli ustawiamy v_ || p_ musi to byc index gracza ( ktory ma bron w dloniach )
jezeli ustawiamy w_ musi to byc index broni lezacej na ziemi
onground
jezeli true, to ustawiamy model w_
jezeli false to ustawiamy model v_ lub p_
v[]
sciezka do modelu v_ ( tylko jezeli onground == false )
p[]
sciezka do modelu p_ ( tylko jezeli onground == false )
w[]
sciezka do modelu w_ ( tylko jezeli onground == true )
*/
Przykład ustawienia modelów v i p:
wck_set_weapon_model(id, false, "models/v_ xD.mdl", "models/p_ xD.mdl", "");

Przykład ustawienia modelu w:
wck_set_weapon_model(id, true, "", "", "models/w_ xD.mdl");


Float:wck_get_sequence_time(ilosc_klatek, ilosc_fps) - http://amxx.pl/topic...czas-sekwencji/

wck_set_weapon_sprite(id_gracza, nazwa_pliku_txt, id_broni, typ_broni, slot_broni) - jest to util wiadomości WeaponList ( http://forums.allied...ad.php?t=175632 ) nie możemy tego używać na AK47. Typ_broni to:


enum
{
WPN_PRIMARY = 1,
WPN_SECONDARY,
WPN_MELEE,
WPN_GRENADE,
WPN_BOMB
}

Slot_broni, powinien mieć wartość ( o ile nie musi ) od 0 do 4. Dodawanie przykładu byłoby zbyt obszerne.

wck_get_weapon_ent_owner(ent_broni) - zwraca id gracza, który jest właścicielem broni o podanym id ( nie podajemy CSW_ tylko id entu broni ). Przykład:
new iOwner = wck_get_weapon_ent_owner( entity );


wck_get_current_weapon_ent(id_gracza) - zwraca id entu obecnie trzymanej przez gracza broni. Przykład:
new iWpnEnt = wck_get_current_weapon_ent(id);


wck_set_weapon_anim(id_gracza, id_sekwencji) - ustawia animację broni konkretnemu playerowi http://amxx.pl/topic...animacji-broni/ Przykład użycia:
wck_set_weapon_anim(id, 2);


wck_set_player_weapon_damage(id_gracza, id_broni, Float:mnoznik) - ustawia graczowi w konkretnej broni mnożnik obrażeń, jeżeli chcemy ustawić podstawowy mnożnik to dajemy 3 argument na 1.00. Przykład użycia:
wck_set_player_weapon_damage(id, CSW_AWP, 1.20);


wck_set_player_weapon_recoil(id_gracza, id_broni, Float:mnoznik) - ustawia graczowi w konkretnej broni mnożnik rozrzutu, jeżeli chcemy ustawić podstawowy mnożnik to dajemy 3 argument na 1.00. Przykład użycia:
wck_set_player_weapon_recoil(id, CSW_AWP, 1.25);


Float:wck_get_weapon_reload_time(id_broni) - zwraca czas przeładowywania broni ( nie uwzględnia wck_set_player_weapon_reload ). Przykład użycia:
new Float:awp_reload_time = wck_get_weapon_reload_time(CSW_AWP);


wck_set_player_weapon_reload(id_gracza, id_broni, Float:mnoznik) - ustawia graczowi w konkretnej broni mnożnik szybkości przeładowywania ( im mniejszy tym szybciej ), jeżeli chcemy ustawić podstawowy mnożnik to dajemy 3 argument na 1.00. Przykład użycia:
wck_set_player_weapon_reload(id, CSW_M4A1, 1.47);


Float:wck_get_player_speed(id_broni) - zwraca szybkość poruszania się z konkretną bronią. Przykład użycia:
new Float:fTest = wck_get_player_speed(CSW_AWP);


download
Załączony plik  weaponcreatekit.sma   11,32 KB  81 Ilość pobrań
  weaponcreatekit.amxx
  • +
  • -
  • 7


#442625 Poradnik amxmodmenu dla świeżego admina by mtzzka

Napisane przez mtzzka w 08.08.2012 12:08

Poradnik amxmodmenu dla początkującego Admina


AMXMODMENU, jest to menu dla adminów serwerów Counter Strike wgrany w AMX MOD X.
Posiada on różne możliwości, które admin może wykorzystać na graczu.
Dostępne funkcje:
  • Kick - Wywala gracza z serwera
  • Ban - Banuje gracza na serwerze
  • Slap/Slay - Uderza/Zgładza gracza na serwerze
  • Przeniesienie gracza - Przenosi gracza do innej drużyny/spect'a
  • Zmiana mapy - Zmienia mapę na serwerze
  • Głosowanie na mapy - Głosuje na następną mapę
  • Ustawienia serwera - Ustawia różne rzeczy
Dla lepszej wygody, polecam zbindować któryś klawisz osobiście ja mam na klawiszu " ] "
Aby to zrobić musimy wpisać w konsoli:
bind "]" "amxmodmenu"
ewentualnie:
bind "twój klawisz" "amxmodmenu"

Po naciśnięciu zbindowanego klawisza wyskoczy nam menu admina, które wygląda następująco:
Dołączona grafika
Wywalenie gracza z serwera:

Dołączona grafika

Wybieramy, danego gracza, którego chcemy wywalić, później jeżeli serwer ma wgrany plugin, możemy napisać powód wywalenia:

Dołączona grafika

Banowanie gracza na serwerze:

Dołączona grafika

Wybieramy czas, na jaki ma być dany ban:

Dołączona grafika

Mój serwer ma wgrany AMX Bans GM więc mogę podawać powody przy banowaniu:

Dołączona grafika

Zgładzenie/Uderzanie gracza, ilość slapów zmieniamy klawiszem 8:

Dołączona grafika

Przenoszenie graczy do innych TEAMów: Team zmieniamy klawiszem 8:

Dołączona grafika

Zmiana mapy, wygląda następująco:

Dołączona grafika

Głosowanie na mapy:

Dołączona grafika

Ustawienia serwera, tutaj możemy konfigurować różne rzeczy np: ustawianie statystyk

Dołączona grafika

Poradnik by: mtzzka

Jestem autorem screenów



Poradnik napisany z myślą dla nowych adminów serwerów: <ciach!>



Zakaz kopiowania na inne fora !




#200659 Advanced Bans

Napisane przez Pawlak093 w 28.12.2010 22:43

Advanced Bans (Real Time)
by Exolent
Version: 0.8.1



Dołączona grafika

  • Ten plugin działa z komendami amx_ban, amx_banip, amx_banid, amx_unban.
  • Działa w Realnym czasie na serwerze np: Kiedy zbanujesz kogoś na 10 minut ta osoba po 10 minutach będzie mogła wejść.
  • Zawiera listę zbanowanych graczy.
  • Nie używa banned.cfg i listip.cfg. Tworzy własny plik i w nim zapisuje bany.
  • W pliku zapisuje kiedy admin zbanował, steamid admina, powód bana, czas, nick gracza, SteamID lub IP gracza zbanowanego, i czas pozostały do unbana.
  • Wczytuje poprzednie bany z banned.cfg and listip.cfg.
  • Daje możliwość wpisania własnego powodu bana.
  • WSZYSTKIE BANY/UNBANY są LOGOWANE (amxmodx/logs) pod nazwą BAN_HISTORY_MMDDYYYY.log (MM = miesiąc, DD = dzień, YYYY = rok)
  • Jeśli chcesz mieć tylko jeden plik z historią banów, od komentuj linijkę w .sma i skompiluj plugin ponownie.
    Spoiler
  • Advanced Bans w wersji SQL może bez problemów działać na kilku serwerach na raz. Jeśli użyjesz tej samej bazy na kilku serwerach bany będą połączone, a każdy serwer będzie chroniony - zasada jak w amxbans.
  • Jeśli wykorzystasz Advanced Bans w wersji SQL plugin wykorzysta cvary z pliku sql.cfg (amx_sql_host, amx_sql_user, amx_sql_pass, amx_sql_db).
Dołączona grafika
  • amx_ban <nick, #userid, authid> <time in minutes> <reason>
  • amx_banip <nick, #userid, authid> <time in minutes> <reason>
  • amx_addban <name> <authid or ip> <time in minutes> <reason>
  • amx_unban <authid or ip> Odbanowując steama pamiętaj o "" ( amx_unban "STEAM_ID" )
  • aamx_banlist - Pokazuje listę zbanowanych graczy
  • amx_addbanlimit <flags> <time in minutes>
  • Przypisz maksymalny czas bana dla danej flagi
  • Komendę dopisz w amxx.cfg
Dołączona grafika
  • ab_website <website>
    • Adres strony wyświetlany banowanemu graczowi, gdzie może składać odwołanie.
    • Pozostaw puste, aby nie pokazywać adresu.
    • Domyślnie: puste
  • ab_immunity <0|1|2>
    • 0 - Każdy może zbanować admina z immunitetem (flaga 'a')
    • 1 - Nie można zbanować żadnego admina z immunitetem (flaga 'a')
    • 2 - Admini z immunitetem (flaga 'a') może być zbanowany tylko przez innego admina z immunitetem.
    • Domyślnie: 1
  • ab_bandelay <seconds>
    • Czas od zbanowania, do wyrzucanie gracza z serwera.
    • Domyślnie: 1
  • ab_unbancheck <seconds>
    • Odstęp w sprawdzaniu gracza gdy ten jest odbanowany (?) - (eng.: Interval of checking if a player is unbanned.)
    • Domyślnie: 5
Dołączona grafika
  • Pobierz wszystkie 3 pluginy z posta adminvote.amxx, plmenu.amxx, oraz advanced_bans_sql.amxx jeśli chcesz korzystać z wersji SQL, lub advanced_bans.amxx w przeciwnym wypadku.
  • Podmień pliki advanced_bans.amxx, plmenu.amxx i adminvote.amxx na swoim serwerze w folderze addons/amxmodx/plugins.
  • Musisz podmienić stare pliki: plmenu.amxx i adminvote.amxx
  • Otwórz plik plugins.ini na swoim serwerze z folderu addons/amxmodx/configs.
  • Dodaj advanced_bans.amxx na samym szczycie listy!
  • Upewnij się że pluginy plmenu.amxx i adminvote.amxx są włączone.
  • Zapisz i zamknij plik.
  • Podmień plik advanced_bans.txt na najnowszy pobrany z tego tematu - plik znajduje się w folderze addons/amxmodx/data/lang.
  • Zmień mapę lub zrestartuj serwer.
    Menu banów
  • Plugin plmenu.amxx został edytowany tak aby współpracował z Advanced Bans.
  • Pobierz w/w plik z tego tematu i podmień w folderze addons/amxmodx/plugins/
  • Odbanowując steama pamiętaj o "" ( amx_unban "STEAM_ID" )
Dodawanie czasy banów
  • Kolejność ustawionych czasów w tym wypadku ma znaczenie!
    • Przykładowo:
      amx_addbanlimit "b" "9000"
      amx_addbanlimit "c" "4000"
  • Jeśli admin ma flagi 'b' i 'c' brana będzie pod uwagę restrykcja z flagi 'b', czyli maksymalny czas bana to 2,5h.
    • Jeśli chcesz by admin z immunitetem nie miał restykcji co do czasu wpisz poniższą linijkę jako pierwszą w amxx.cfg!
      amx_addbanlimit "a" "0"
Pliki *.amxx w paczce

Załączone pliki


  • +
  • -
  • 74


#449957 Savev - Nowy zapis

Napisane przez GT Team w 22.08.2012 11:24

Witam, przedstawiam wam moj własny zapis.
Mieści się on w pliku inc.

Tu jego zawartosc :

#if defined _Save_included
#endinput
#endif

#include <amxmodx>

new sciezka[] = "addons/amxmodx/Zapis_v2" // Folder zapisywanych plikow

/* Funkcja Zapisywania */

public ZapiszDane(const file[], const key[], const data[])
{
new ominac
new c[1024], sciezka_[128], arg1[64], tekst[500], len;

formatex(sciezka_, 127, "%s/%s", sciezka, file);

formatex(c, 1023, "^"%s^" ^"%s^"", key, data);

if(!dir_exists(sciezka))
mkdir(sciezka);

if(!file_exists(sciezka_))
write_file(sciezka_, "", 0);

for(new i; read_file(sciezka_, i, tekst, 499, len);i++)
{
parse(tekst, arg1, 63);

if(equal(key, arg1, strlen(arg1)))
{
write_file(sciezka_, c, i);
ominac++
}
else
continue;
}
if(!ominac)
write_file(sciezka_, c, -1);
ominac = 0
}

/* Funkcja Odczytywania */

public WczytajDane(const file[], const key[], data[], len)
{
new tekst[1101], len, sciezka_[128];
new arg1[64], arg2[1024];

formatex(sciezka_, 127, "%s/%s", sciezka, file)

if(!file_exists(sciezka_))
return PLUGIN_CONTINUE
for(new i; read_file(sciezka_, i, tekst, 1100, len);i++)
{
parse(tekst, arg1, 63, arg2, 1023);

if(equal(key, arg1, strlen(arg1)))
copy(data, len, arg2);
else
continue;
}
return PLUGIN_CONTINUE
}

/* Funkcja Usuwania */

public UsunDane(const file[], const key[])
{

new tekst[1101], len, sciezka_[128];
new arg1[64], arg2[1024];

formatex(sciezka_, 127, "%s/%s", sciezka, file)

if(!file_exists(sciezka_))
return PLUGIN_CONTINUE
for(new i; read_file(sciezka_, i, tekst, 1100, len);i++)
{
parse(tekst, arg1, 63, arg2, 1023);

if(equal(key, arg1, strlen(arg1)))
write_file(sciezka_, "", i);
else
continue;
}
return PLUGIN_CONTINUE
}


teraz przedstawie funkcje i jak je uzywać:

ZapiszDane(const file[], const key[], const data[])


Zapisuje dane data[] do pliku file[] do klucza key[] np:

new nick[33]
get_user_name(id, nick, 32)
ZapiszDane("plik.txt", nick, "Dane")



WczytajDane(const file[], const key[], data[], len)


Wczytuje dane z pliku file[] z klucza key[] do data[] o dlugosci len np:

new nick[33], dane[33]
get_user_name(id, nick, 32)
WczytajDane("plik.txt", nick, dane, 32)



UsunDane(const file[], const key[])


Usuwa dane z pliku file[] z klucza key[] np:


new nick[33]
get_user_name(id, nick, 32)
UsunDane("plik.txt", nick)


const file[]
- Nazwa pliku z rozszerzeniem np: "plik.txt"
const key[]
- Klucz, po ktorym ma wyszukiwać np :
const data[]
- Co ma zapisać do danego klucza / Do czego ma wczytac.
len
- do ilu ma zapisac (tylko w WczytajDane)

Plik tworzy sie w folderze : addons/amxmodx/Zapis_v2/nazwa_pliku.rozszerzenie
A teraz przykład użycia w krótkim kodzie:


/* Plugin generated by AMXX-Studio */

#include <amxmodx>
#include <savev>
#include <fun>

#define PLUGIN "Zapis"
#define VERSION "1.0"
#define AUTHOR "tomcionek15 & grs4"

new plik[] = "fragi_gracza.txt"
public plugin_init() {
register_plugin(PLUGIN, VERSION, AUTHOR)

register_clcmd("say /zapisz", "Zapisz")
register_clcmd("say /wczytaj", "Wczytaj")

}
public Zapisz(id)
{
new nick[33], dane[64]
get_user_name(id, nick, 32)
formatex(dane, 63, "%d %d %d %d", get_user_frags(id), get_user_deaths(id), get_user_health(id), get_user_armor(id))
ZapiszDane(plik, nick, dane)
}
public Wczytaj(id)
{
new nick[33], dane[64]
get_user_name(id, nick, 32)
WczytajDane(plik, nick, dane, 63)

new fg[5], dg[5], zg[5], ag[5] // fg = fragi gracza, dg = dedy graczca itd...
parse(dane, fg, 5, dg,5, zg, 5, ag, 5)

client_print(id, 3, "Z poprzedniego zapisu wynika, ze miales")
client_print(id, 3, "%d zabic i zgineles %d razy,", str_to_num(fg), str_to_num(dg))
client_print(id, 3, "miales %d zycia, i %d kamizelki", str_to_num(zg), str_to_num(ag))
}


A o to efekt:
Dołączona grafika

zawartośc pliku : Zapis_v2/fragi_gracza.txt :


"STRIKER--McPr0 :D" "1 4 98 0"

Plik .inc w zalączniku
I .sma uzyte.

===

Wszystko co robie, robie dla ludzi :)

Załączone pliki




#447287 Fajna paczka Codmod

Napisane przez G[o]Q w 16.08.2012 18:26

20 zł od klasy?
  • +
  • -
  • 16


#98760 return PLUGIN_CONTINUE - co robi?

Napisane przez R3X w 12.12.2009 23:14

przy łapaniu eventów silnika zwrócona wartość (PLUGIN_HANDLED, PLUGIN_HANDLED_MAIN, PLUGIN_CONTINUE)decyduje o wyniku

weźmy na przykład łapania wiadomości SayText przez zarejestrowanie komendy

register_clcmd("say test", "cmdTest");

funkcja cmdTest jest wywoływana tuż po użyciu i tuż przed wyświetleniem, zwracając w niej PLUGIN_HANDLED sprawisz, że wiadomość zostanie zatrzymana - test nie zostanie pokazana na czacie, zwróc CONTINUE i przetwarzanie nie zostanie zakłócona i pokaże się na czacie
  • +
  • -
  • 3


#414061 Deathrun Rangi [AMXX + SQL + WWW]

Napisane przez Gość w 24.05.2012 22:38

opis
Plugin Deathrun Rangi liczy skoki wykonane Bunny Hopem na serwerze.
Przekraczając kolejne progi wykonanych skoków, zdobywamy kolejne rangi.
Skacząc, w czasie rzeczywistym widzimy, ile mamy wykonanych skoków i jaką rangę.

Menu. Konfiguracja
W przystępnym Menu możemy zobaczyć statystyki oraz wymagania do rang.
Ponadto, dostępna jest konfiguracja opcji wyświetlania i powiadomień.

[warn='Zalecenie']Plugin idealny na serwery Deathrun, choć nadaje się do każdej rozgrywki[/warn]Statystyki. Online
Wszystkie statystyki, w tym top10, możemy obejrzeć zarówno w grze,
jak i online na serwerze WWW, wyszukując, sortując i filtrując wyniki.

[info='Pełna integracja']Plugin posiada 2 natywy oraz 2 forwardy (opisane niżej),
pozwalając na sukcesywną współpracę z innymi pluginami.[/info]Dodatki
Do pluginu udostępnione są 2 dodatki, wykorzystujące forwardy:
  • Muzyka wyświetlana w momencie zdobycia nowej rangi (muzyka załączona poniżej)
  • Informacja dla najlepszego gracza w rankingu (pluginy załączone są poniżej)
wymagane moduly
amxmodx
fakemeta
engine
sqlx

Baza danych SQL
Serwer z obsługą PHP*

*opcjonalnie dla statystyk online


cvary

// CVARy ogólne
amx_dr_rangi_speed 290 // minimalna prędkość wykonywanych skoków Bunny Hopem liczonych do rankingu
amx_dr_rangi_team 2 // drużyna, której Bunny Hop jest liczony (0 - wszyskie, 1 - tylko Terro, 2 - tylko CT, 3 - żadna)
amx_dr_rangi_show_best 1 // [0|1] czy pokazywać (1) najlepszego skoczka na serwerze, czy nie (0)
amx_dr_rangi_prefiks "[Deathrun_Rangi]" // prefiks pokazywany w informacjach na sayu

// CVARy jako dane do bazy danych, w której przechowujemy statystyki
amx_dr_rangi_host "localhost" // adres do bazy danych
amx_dr_rangi_user "root" // użytkownik bazy danych
amx_dr_rangi_pass "root" // hasło do bazy danych
amx_dr_rangi_db "db" // nazwa bazy danych


[error='Ostrzeżenie']W przypadku problemów z konfiguracją lub pytaniem
dotyczącym implementacji natywów bądź forwardów, załóż nowy temat.

Nie dość, że zachowasz przejrzystość w tym dziale, to prosząc o pomoc
w odpowiednim dziale, uzyskasz ją dużo szybciej i unikniesz ostrzeżenia.[/error]komendy
/rangi - pokazuje Menu Deathrun Rang, w którym można:
  • sprawdzić najlepszych skoczków na serwerze
  • sprawdzić swój własny ranking
  • opis rang i ich wymagania
  • ustawić miejsce wyświetlania informacji o skokach
  • ustawić, czy ranga ma się pokazywać przy ilości skoków
Forwardy:
dr_rangi_new_lvl(id) // Wbicie nowej rangi
dr_rangi_best_player(id) // Index gracz który ma najwięcej skoków ( warunek musi być on połączony ). Wywołanie co rundę.


Natywy:
get_user_jumps(id) // Zwraca ilość skoków gracza
get_user_rang(id) // Zwraca rangę gracza


screenshot
Dołączona grafika

instalacja
Plugin podstawowy Deathrun Rangi (wymagane):
  • Rangi_Deathrun.amxx kopiujemy do amxmodx/plugins (wymagane, podstawowe)
  • do amxmodx/plugins.ini dodajemy Rangi_Deathrun.amxx (wymagane, podstawowe)
  • do amxmodx/amxx.cfg dodajemy wyżej opisane cvary (ustawione wg własnych upodobań, wymagane, podstawowe)
Plugin dodatkowy, odgrywa muzyczkę przy awansie do nowej rangi (opcjonalnie):
  • lvl_up.mp3 kopiujemy do sound/misc (opcjonalnie, odgrywa muzyczkę przy awansie do nowej rangi)
  • Muzyka_na_wbicie_nowej_rangi.amxx kopiujemy do amxmodx/plugins (opcjonalnie, odgrywa muzyczkę przy awansie do nowej rangi)
  • do amxmodx/plugins.ini dodajemy Muzyka_na_wbicie_nowej_rangi.amxx (opcjonalnie, odgrywa muzyczkę przy awansie do nowej rangi)
Plugin dodatkowy, wyświetla informację o najlepszym graczu (opcjonalnie):
  • Best_Player.amxx kopiujemy do amxmodx/plugins (opcjonalnie, wyświetla informację o najlepszym graczu)
  • do amxmodx/plugins.ini dodajemy Best_Player.amxx (opcjonalnie, wyświetla informację o najlepszym graczu)
Opcjonalne pliki SMA dla programistów w celu przejrzenia kodu i ewentualnej modyfikacji (opcjonalnie):
  • Rangi_Deathrun.sma kopiujemy do amxmodx/scripting (opcjonalnie)
  • db.inl kopiujemy do amxmodx/scripting (opcjonalnie)
  • Deathrun_Rangi.inc kopiujemy do amxmodx/scripting/includes (opcjonalnie)
  • Muzyka_na_wbicie_nowej_rangi.sma kopiujemy do amxmodx/scripting (opcjonalnie, odgrywa muzyczkę przy awansie do nowej rangi)
  • Best_Player.sma kopiujemy do amxmodx/scripting (opcjonalnie, wyświetla informację o najlepszym graczu)
konfiguracja
Na serwer WWW kopiujemy zawartość folderu WWW (4 pliki)
z czego edytujemy jedynie plik Konfiguracja.php
Instrukcja znajduje się w środku ww. pliku.

[success='Dane SQL']Pamiętaj, aby pobierać dane na serwer WWW z tej samej bazy danych, do której statystyki zapisuje plugin Deathrun Rangi.
Upewnij się też, czy użytkownik bazy danych posiada dostęp do bazy danych zarówno z serwera gry, jak i serwera WWW.[/success]
Zmiana rang i wymagań
Aby zmienić rangi lub wymagania, należy edytować plik główny Rangi_Deathrun.sma
1. Znajdujemy linijkę new const g_Rangi[][] = i pod nią mamy nazwy kolejnych rang. Bez problemu możemy ich nazwy zmieniać, usuwać i dodawać nowe.
Należy jednak pamiętać, aby znajdowały się one w cudzysłowie i po każdej randze, porócz ostatniej, znajdował się przecinek, jak w oryginale.
2. Tak samo postępujemy z wymogami znajdującymi się poniżej linijki new const g_Wymogi[] =, gdzie kolejne od góry liczby odpowiadają kolejnym
rangom i wyrażają liczbę skoków wymaganą do zdobycia kolejnej rangi. należy pamiętać, by liczba rang była identyczna, jak liczba wymogów.
3. Na końcu zliczamy nową liczbę rang i aktualizujemy max_level z linijki 13.: #define max_level 16, zmieniając 16 na nową liczbę rang do zdobycia.
4. Gdy już wprowadzimy wszystkie zmiany, zapisujemy plik, kompilujemy lokalnie, aktualizujemy DeathrunRanking.amxx na serwerze i zmieniamy mapkę.
inne informacje
Autorzy: speedkill i benio101
Podziękowanie dla Fili:P za wycięcie muzyki
Język: polski
Wersja: 1.2.1

Changelog:
v. 1	  N Wersja inicjalizacyjna
v. 1.1	  $ Poprawiono obsługę błędów
	  $ Poprawiono numerację paginacji
v. 1.2	  + Dodanie numeracji miejsc
	  $ Poprawiono algorytm sortowania
	  $ Zoptymalizowano kod
	  $ Zmniejszono liczbę zapytań do bazy danych
	  + Dodano informację o liczbie wpisów w bazie danych
v. 1.2.1  ! Aktualizacja krytyczna
	  $ Zoptymalizowano kod
	  $ Dodano zabezpieczenie cvarów (FCVAR_PROCETED)

download

Załączony plik  Rangi_Deathrun.rar   121,93 KB  1320 Ilość pobrań
Załączony plik  Rangi_Deathrun.sma   10,59 KB  949 Ilość pobrań
  Rangi_Deathrun.amxx


#226358 High Ping Kicker + colorchat

Napisane przez LucKy_skiLL w 17.03.2011 17:57

Mała modyfikacja znanego pluginu który kikuje graczy za wysoki ping, dodałem colorchat, jest to bardziej przejrzysta forma.


Tak wygląda plugin na serwerze

Dołączona grafika

Załączone pliki


  • +
  • -
  • 49


#307752 Generator klas COD Mod

Napisane przez R3X w 14.10.2011 18:40

Przygotowaliśmy dla Was Generator klas (link również w menu Dodatki AMXX)

Wypełnij formularz i pobierz własną klasę do nowego Cod moda. Oprócz wyboru broni i statystyk klasy możliwe jest też dołączanie różnych dodatków. Na razie jest ich kilka, niedługo będą kolejne.

Mam nadzieję, że się przyda :)
  • +
  • -
  • 98


#426314 Polskie końcówki wyrazów w zależności od wartości

Napisane przez Gość w 30.06.2012 18:10

Wstęp
Na pewno nieraz widzieliście napisy typu:
  • Koszt przesyłki wynosi 24 złotych
  • Na Twoim koncie jest 1 punktów
  • Sesja wygaśnie za 4 minut
Nie potrafiliście sobie z tym poradzić,
lub po prostu problem Was przerastał.

Mam dla Was wspaniałą nowinę:
Od dziś będziecie spać spokojnie!
Albowiem przedstawiam rozwiązanie.

Stock wybiera odpowiednią końcówkę na podstawie podanej wartości.

Mamy do czynienia z dwoma stockami:
  • dkoncowka() dla liczb całkowitych (integer, decimal)
  • fkoncowka() dla dla liczb zmiennoprzecinkowych (float)
Zastosowanie

dkoncowka(ile, czlon[], zero[], jeden[], dwa[]);
fkoncowka(Float:ile, czlon[], zero[], pol[], jeden[], dwa[]);


Opis
  • ile [liczba całkowita dla dkoncowka(), zmiennoprzecinkowa dla fkoncowka()] → wartość, na podstawie której wybierana będzie końcówka
  • czlon [ciąg znaków] → wbrew nazwie humanistycznej, początek wyrazu wyświetlanego, identyczny dla wszystkich kolejnych argumentów
  • zero [ciąg znaków] → końcówka, którą przyjmuje wyraz dla wartości ile równej 0, która dołączona do członu da pełny, odmieniony wyraz
  • pol [ciąg znaków] → końcówka, którą przyjmuje wyraz dla wartości ile równej 0.5, która dołączona do członu da pełny, odmieniony wyraz
  • jeden [ciąg znaków] → końcówka, którą przyjmuje wyraz dla wartości ile równej 1, która dołączona do członu da pełny, odmieniony wyraz
  • dwa [ciąg znaków] → końcówka, którą przyjmuje wyraz dla wartości ile równej 2, która dołączona do członu da pełny, odmieniony wyraz
Uwaga
Zmienna czlon służy zaoszczędzeniu czasu w używaniu funkcji, pozostawienie jej pustej i podanie pełnych odmian słów pozostałych zmiennych
w zupełności spełni swoje zadanie, choć zazwyczaj zwyczajnie przysporzy nam niepotrzebnego pisania kilkakrotnie początku tego samego wyrazu.

Przykłady
if(is_user_alive(id)){
new hp=get_user_health(id);
client_print(id,print_chat,"Masz %d %s zycia", hp, dkoncowka(hp, "punkt", "ow", "", "y"));
}

if(is_user_connected(id)){
new frags=get_user_frags(id);
if(frags)
client_print(id,print_chat,"Zdobyles %d %s", frags, dkoncowka(frags, "frag", "ow", "a", "i"));
else
client_print(id,print_chat,"Nie zdobyles jeszcze zadnego fraga");
}


Stocki do skopiowania
stock dkoncowka(ile, czlon[], zero[], jeden[], dwa[]){
new str[1024];
ile=abs(ile);
if(ile==1){
format(str,1023,"%s%s",czlon,jeden);
return str;
}
if((ile%10==2 || ile%10==3 || ile%10==4) && (!(ile%100==12 || ile%100==13 || ile%100==14))){
format(str,1023,"%s%s",czlon,dwa);
return str;
}
format(str,1023,"%s%s",czlon,zero);
return str;
}

stock fkoncowka(Float:ile, czlon[], zero[], pol[], jeden[], dwa[]){
new str[1024];
ile=floatabs(ile);
if(ile==1.0){
format(str,1023,"%s%s",czlon,jeden);
return str;
}
if(ile!=floatround(ile)){
format(str,1023,"%s%s",czlon,pol);
return str;
}
new num=floatround(ile);
if((num%10==2 || num%10==3 || num%10==4) && (!(num%100==12 || num%100==13 || num%100==14))){
format(str,1023,"%s%s",czlon,dwa);
return str;
}
format(str,1023,"%s%s",czlon,zero);
return str;
}


Stocki do pobrania
Załączony plik  koncowka.inc   1,02 KB  133 Ilość pobrań

Implementacja (koncowka.inc)
  • Kopiujemy stock do folderu scripting/include i dodajemy na początku kodu
    #include <koncowka>
    
  • Lub kopiujemy potrzebne stocki do naszego kodu



#311121 PHP.BLOG v0.1

Napisane przez Gh0st w 21.10.2011 09:23

Chcę wam przedstawić autorski blog ^^

O SKRYPCIE


Chcesz mieć swój własny blog przy którym nie trzeba za każdym razem otwierać pliku w którym jest treść strony? jeżeli tak to to jest skrypt dla ciebie. ^^


Blog nie jest pisany obiektowo co uniemożliwia po większej części ingerencje. Jako iż zaczynam uczyć pomału programowania obiektowego to pomału będę przepisywał ten blog na Klasy i obiekty


Kod nie wygląda za ładnie ^^ więc się nie czepiać xD

  • Obsługa bazy MYSQL
  • Możliwość edytowania menu górnego jak i tego menu po lewej stronie za pomocą panelu admina
  • System templatek , zmiana wyglądu strony wtedy nie będzie niczym trudnym
  • Przejrzysta strona
  • Newsy
  • Komentowanie Newsów
  • Dodawanie nowych stron z poziomu przeglądarki ( coś takiego jak Add code integration w ip.b
  • Dodawanie kont adminów
  • Czat (nad tym się jeszcze zastanawiam)
  • Zabezpieczona strona, wszystkie dane wychodzące od użytkownika jak i od admina są filtrowane, również zabezpieczony plik config.php przed otwieraniem poprzez notatnik lub z innego serwera.
  • No i wiele innych.
DEMO: Strona Główna :: Demo PHPBLOG


INSTALACJA

Otwieramy Plik

config.php

Który znajduje się w paczce która jest w załączniku i tam zmieniamy dane na nasze dane.

Następnie otwieramy plik

zapytania.txt
I każde z tych zapytań wprowadzamy do bazy danych ^^ w next wersji postaram się zrobić plik instalacyjny .


Jeżeli wszystko zostało dobrze wprowadzone strona powinna funkcjonować poprawnie

Następnie wchodzimy do panelu admina adresem :

index.php?action=panel_admina

I Logujemy się danymi :

Admin
tomekstw


Zrzut Ekranu


Dołączona grafika






JAK ZMIENIĆ WYGLĄD STRONY?


Wchodzimy do folderu
./tmpl/
Następnie edytujmy wybrany przez siebie plik
style.css
index.tmpl
./images/
Jak pisałem wyżej, to nic trudnego . Lub można też edytować wygląd z poziomu panelu admina.
Edytuj Wygląd Strony


Udanego Korzystania z blogu ^^
Wszystkie Błędy / Bugi / Niedociągnięcia i propozycję proszę zgłaszać w tym temacie ^^

CHANGE LOG


Wersja 0.0 - Dziwna wersja :o

  • Wydanie Bloga

Wersja 0.1

  • Poprawiono parę błędów ortograficznych.
  • naprawiony błąd z spamowaniem komentarzami metodą F5
  • Dodano możliwość edycji Pozycji w menu
  • Dodano Favicon. Która znajduje się w głównym Katalogu
  • Odczytywanie newsów na stronie głównej po [b]1024B[b](Bajty) (Podziękowania dla ByCZUS za pomoc xD)
  • Spolszczone Read More i Comments.
  • Aby Zrobić UPDATE należy podmienić wszystkie pliki oprócz config.php :)

Załączone pliki


  • +
  • -
  • 8