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
 

WizZi - zdjęcie

WizZi

Rejestracja: 17.10.2010
Aktualnie: Nieaktywny
Poza forum Ostatnio: 13.08.2013 07:19
-----

#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


#41466 Jak napisac plugin ?

Napisane przez rS. w 07.02.2009 17:10

Serdecznie witam wszystkich , tak więc zaczynamy .



Pierwsze Kroki jakie musimy zrobic to:

AMXx Studio - program do kompilacji, przerabiania i pisania własnych pluginów (można go pobrać z http://www.amxmodx.org , znajduje się w packu AMX Mod X Full Installer, lub można go pobrać samodzielnie AMX Mod X Studio)


Tutaj opiszę jak skonfigurować AMXx Studio aby można było kompilować pluginy:

Po otworzeniu AMXx Studio widzimy taki ekran:

screen1.jpg - Rozmiar oryginalny - Fotosik.pl

Wchodzimy w Tools-->Settings (F12)

screen2.jpg - Rozmiar oryginalny - Fotosik.pl

Następnie Compiler Settings w pierwszym białym polu podajemy adres do naszego pliku (amxxpc.exe - to kompilator znajduje sie w folderze tam gdzie masz CS addons/amxmodx/scripting)


screen3.jpg - Rozmiar oryginalny - Fotosik.pl


Klikamy ok i od tej pory kompilowanie pluginów nie powinno stwarzać problemu tylko otwieram i klikamy compile.

Ciekawostka:
Wybrałem amx studio ponieważ uczyłem się na nim od początku od kolegi


Tak więc zaczynamy:

Otwieramy program AMX Mod X Studio
Co gdzie i jak?:
Dołączona grafika

W tych 3 okienkach będziemy widzieć :

a/1 - W tym okienku, po zaznaczeniu danego fragmentu kodu, zobaczymy, jak zostaje sklasyfikowana poszczególna jego część (czy jest to funkcja, metoda, etc.).
b/2 - W tym okienku zobaczymy (po kliknięciu na dany folder) ile razy użyliśmy danej funkcji, metody, zmiennej, etc.
c/3 - Główne okno programu. To w nim piszemy kod plugin'u.


Teraz musimy podać ścieżkę do kompilatora. W tym celu klikamy F12.
Pojawi sie nam to :

Dołączona grafika

W Compiler (amxxpc.exe) podajemy ścieżkę do kompilatora. Znajdziesz ją w :

addons/amxmodx/scripting

W Default Output Directory podajemy miejsce, gdzie będą zapisywały się skompilowane pliki.


Tak więc przygotowaliśmy amxstudio do pracy więc można zaczynac :)

Zmienne: Zmienne są to struktury, które mają przechowywać pewne informacje przez jakiś okres czasu.

Jakie może mieć typy zmiennych:

•|1Zmienne logiczne.
•|2Integer'y.
•|3Liczby dziesiętne.


Zmienne Logiczne: Zmienne logiczne są bardzo proste wy wykonaniu i obsłudze. Można im nadać jedynie dwie wartości a mianowicie:

"true"
"false"

new bool:
CzyJestWlączone // Tworzę nową zmienną "CzyJestWlaczone", która jest automatycznie ustawiona na "false"

new bool:
JestWlaczone=true //Tworzę nową zmienną JestWlaczone i nadaje jej wartość "true".


Integer'y Są to najprostsze struktury w języku skryptowym Pawn , aby umieścić taką zmienną w kodzie, musimy użyć instrukcji new nazwa_zmiennej.


new c=5.0
//Ta zmienna jest niewłaściwa

new a
//Tworzymy pustą zmienną "a"

new b=5
//Tworzymy nową zmienną "b" i ustawiamy jej wartość na 5.

new d="siema"
//"siema" nie jest liczbą, dlatego ta zmienna też jest niewłaściwa.


Liczby dziesiętne Jeżeli chcemy w kodzie plugin'u umieścić liczbę dziesiętną, musimy określić typ zmiennej jako "float". By to wykonać musimy zrobić to w następujący sposób :

new Float
nazwa_zmiennej

new d="siema"
//Ta zmienna nadal nie jest właściwa

new Float:c=5.0
//Ta zmienna była niewłaściwa. Teraz, gdy określiliśmy typ zmiennej na "float" stała się właściwa <img src='http://img.amxx.pl/public/style_emoticons/default/wink.gif' class='bbc_emoticon' alt=';)' />.

new Float:b=5.1
//Tworzymy nową zmienną "b" i ustawiamy jej wartość na 5.1.

Teraz będzie sporo czytania ze zrozumieniem musicie wszystko po kolei ładnie przeczytaj to jest najgłówniejsza rzecz , będziemy się uczyć jak działa plugin , i budową pluginu:

Włączamy AMX MOD X Studio i klikamy CTRL + N.
Otworzy nam się nowe okno z plugin'em, który wygląda tak :

/* Plugin generated by AMXX-Studio */

#include <amxmodx>
#include <amxmisc>

#define PLUGIN "New Plugin"
#define VERSION "1.0"
#define AUTHOR "Author"


public plugin_init() {
    register_plugin(PLUGIN, VERSION, AUTHOR)
   
    // Add your code here...
}

Teraz o budowie pluginu .

Instrukcje w pluginie zawierają się w funkcjach. Owe funkcje można porównać to spiętych kartek w zeszycie (oryginalne porównanie by Seba :] ) - instrukcje są po kolei wykonywane (tak jak zapisujemy kartki w zeszycie). Każdą funkcję w plugin'ie musimy zarejestrować w kodzie. Robimy to tak :

public nazwa_funkcji(wartości_jakie_przyjmuje_funkcja)
{
//Tutaj będzie nasz kod
}

Kod w funkcji zapisujemy między nawiasami klamrowymi. Funkcje mogą być wywoływane przez gracza (gracz zrobił coś, np. otrzymał obrażenia - nasza funkcja się wykonuje) lub przez inne funkcje.
Wiem, że możecie tego nie zrozumieć, ale przeczytajcie to jeszcze kilka razy i obraz Wam się rozjaśni. Zabieramy się za nasz plugin :) .
Na początku musimy pod nasz plugin podpiąć odpowiednie moduły.
Co to są moduły? Są to zbiory instrukcji. Jeżeli w pluginie użyjemy instrukcji, która wymaga zadeklarowania odpowiedniego modułu - plugin się nie skompiluje.
Otwórzmy okno z AMX MOD X Studio.

#include <amxmodx>
#include <amxmisc>

dopiszmy :

#include <fun>

oraz :

#include <cstrike>

Fun jest to moduł, który zawiera instrukcje związane z "zabawą" (zmienianiem HP oraz armor'a gracza, wyrzucaniem jego wszystkich broni, itp.).
Cstrikezawiera instrukcje, które pozwalają nam np. na zmienianie ilości pieniędzy gracza oraz także na zmienianie jego armor'a (jak w fun'ie) z tym, że tutaj możemy dodatkowo określić rodzaj kamizelki (sama kamizelka czy z hełmem).
Następną czynnością, jaką musimy wykonać jest zadeklarowanie zmiennej do naszej pcvark'i ( jeżeli nie wiecie jak to się robi - odsyłam Was do poprzedniej lekcji). Pcvark'i są szybsze od zwykłych cvar'ek, ale czym różni się deklarowanie pcvarek od deklarowania cvar'ek?
Pcvark'i muszą zostać przypisane do zmiennej, więc zadeklarujmy takową.
Nasza pcvark'a będzie odpowiadać za koszt skorzystania z usługi zmiany HP, więc nadajmy jej nazwę (na przykład) hp_koszt.
Zadeklarujmy zmienną. Dla czystości kodu robimy to pod :

#define PLUGIN "New Plugin"
#define VERSION "1.0"
#define AUTHOR "Author"

new hp_koszt

Teraz musimy zadeklarować naszą pcvarkę.
Robimy to w funkcji plugin_inti(). W funkcji ten deklarujemy wszystkie event'y, cvarki, itp.
Pod :

register_plugin(PLUGIN, VERSION, AUTHOR)

dopisujemy :

hp_koszt = register_cvar("hp_koszt","6000")

Instrukcja register_cvar("nazwa_cvarki","jaką_domyślną_wartość_przypisujemy") odpowiada za rejestrowanie cvar'ek. W nawiasie musimy podać nazwę cvarki oraz domyślną wartość. Domyślny koszt skorzystania z usługi zmiany HP ustawiłem na 6000.
Teraz zarejestrujemy co musi wpisać gracz, aby mógł skorzystać z usługi zmiany HP.
Umożliwia nam to instrukcja register_clcmd("jaką_komendę_musi_wpisać_gracz","którą_funkcję_wywołuje_wpisana_komenda")
Dopisujemy w plugin_init() :

register_clcmd("say /hpme","hp")

/hpmejest to komenda, którą gracz musi wpisać w say'u. Owa komenda wywołuje funkcję hp. Musimy tą funkcję teraz stworzyć.
Za ostatnim nawiasem klamrowym w naszym pluginie (za nawiasem zamykającym funkcję plugin_init()) dopisujemy :

public hp(id){
}

Wartość id w nawiasie jest to unikalny identyfikator gracza. Można go oczywiście nazwać inaczej, jak player lub gracz, ale id jest najtrafniejsze :) .
Dodamy teraz pierwszą instrukcję warunkową, która uniemożliwi skorzystanie z usługi zmiany HP gdy gracz jest nieżywy.
W funkcji hp(id) dopisujemy :

if(!is_user_alive(id)){
}

Wykrzyknik przed instrukcją is_user_alive(id) sprawia, że dana instrukcja zostanie wykonana tylko wtedy, gdy gracz nie jest żywy. !można przetłumaczyć jako nie,a całą instrukcję jako jeżeli gracz nie jest żywy wykonaj
Teraz przydałoby się zawiadomić gracza, że nie może skorzystać z naszej usługi.
W tym celu przyda nam się instrukcja client_print(), czyli wypisz graczowi.

Wygląda ona tak :

code_print(id,rodzaj_wypisanej_wiadomości (print_chat - wypisuje ją tak jak say lub print_center - wypisuje ją tam, gdzie wiadomości "Counter Terrorist win, itp.","Co_chcemy_wypisać")

Dopiszmy w naszej instrukcji warunkowej (za nawiasem klamrowym naszej instrukcji warunkowej) instrukcję :

client_print(id,print_chat,"[Zmiana HP] Nie mozesz skorzystac z tej uslugi ziom, bo jestes niezywy ;-(")

Przydałoby się teraz zastopować plugin. Dlaczego?
Dlatego, że nasza instrukcja nie została spełniona i nie chcemy, aby to co jest po niej wykonało się.
W naszej instrukcji warunkowej dopisujemy :

return PLUGIN_HANDLED

co oznacza - zwróć zastopowany plugin lub nie wykonuj dalej.
Teraz kolejna instrukcja warunkowa, uniemożliwiająca skorzystanie z usługi gdy nasze HP już wynosi 200.
Deklarujemy kolejną instrukcję warunkową. Do sprawdzenia życia gracza przyda nam się instrukcja get_user_health(id).

    if(get_user_health(id)>=200)){
       
    }

Teraz wzorem poprzedniej funkcji zaalarmujmy użytkownika, że nie może wykonać danej czynności. Tak jak wtedy posłuży nam do tego client_print().

client_print(id,print_chat,"[Zmiana HP] Juz skorzystales z tej uslugi!")

Standardowo dodajemy też zastopowanie plugin'u :

return PLUGIN_HANDLED

Dotychczas nasz kod powinien wyglądać tak :

/* Plugin generated by AMXX-Studio */

#include <amxmodx>
#include <amxmisc>
#include <fun>
#include <cstrike>

#define PLUGIN "New Plugin"
#define VERSION "1.0"
#define AUTHOR "Author"

new hp_koszt

public plugin_init() {
    register_plugin(PLUGIN, VERSION, AUTHOR)
    register_cvar("hp_koszt","6000")
    register_clcmd("/say hpme","hp")
}

public hp(id){
    if(!is_user_alive(id)){
        client_print(id,print_chat,"[Zmiana HP] Nie mozesz skorzystac z tej uslugi ziom, bo jestes niezywy ;-(")
        return PLUGIN_HANDLED
    }
    if(get_user_health(id)>=200){
        client_print(id,print_chat,"[Zmiana HP] Juz skorzystales z tej uslugi!")
        return PLUGIN_HANDLED
    }
}

Teraz w końcu dodamy zmianę HP :) .
Umożliwi nam to instrukcja set_user_health(id,ile_HP).
Za klamrą zamykającą ostatnią instrukcję warunkową dopisujemy :

set_user_health(id,200)

Teraz pozostaje nam tylko odjęcie odpowiedniej ilości pieniędzy.
Posłuży nam do tego instrukcja cs_set_user_money(id,ilosc_pieniedzy) oraz
cs_get_user_money(id).
Pierwsza umożliwia ustawienie ilości pieniędzy a druga pobranie ilości pieniędzy posiadanej przez gracza.
Potrzebujemy jeszcze teraz instrukcji, która pobierze z pcvark'i hp_koszt koszt naszej usługi. Posłuży nam do tego get_pcvar_num(nazwa_cvarki).Pobiera ona wartość liczbową zapisaną w cvarc'e.
Dopisujemy pod instrukcją ustawiania życia :

cs_set_user_money(id,cs_get_user_money(id)-get_pcvar_num(hp_koszt))

Teraz dla czystej kosmetyki i poprawnego działania plugin'u dodajemy jeszcze pod ostatnią instrukcją :

return PLUGIN_HANDLED

No tak własnie ty , to koniec! CONGRATULATION . Jeżeli coś zle wypaliło napisz mi jeżeli masz z czymś problem . Jeżeli jest jakiś błąd w poradniku .

Teraz pozostaje Wam tylko skompilowanie plugin'u i zainstalowanie go na serwerze.
Finałowy kod powinien wyglądać tak :

/* Plugin generated by AMXX-Studio */

#include <amxmodx>
#include <amxmisc>
#include <fun>
#include <cstrike>

#define PLUGIN "New Plugin"
#define VERSION "1.0"
#define AUTHOR "Author"

new hp_koszt

public plugin_init() {
    register_plugin(PLUGIN, VERSION, AUTHOR)
    register_cvar("hp_koszt","6000")
    register_clcmd("/say hpme","hp")
}

public hp(id){
    if(!is_user_alive(id)){
        client_print(id,print_chat,"[Zmiana HP] Nie mozesz skorzystac z tej uslugi ziom, bo jestes niezywy ;-(")
        return PLUGIN_HANDLED
    }
    if(get_user_health(id)>=200){
        client_print(id,print_chat,"[Zmiana HP] Juz skorzystales z tej uslugi!")
        return PLUGIN_HANDLED
    }
    set_user_health(id,200)
    cs_set_user_money(id,cs_get_user_money(id)-get_pcvar_num(hp_koszt))
    return PLUGIN_HANDLED
}



Poradnik wykonany w całości przez Paweł
  • +
  • -
  • 51


#240249 Nie dziala powloka

Napisane przez R3X w 22.04.2011 18:37

jasne, zmień tryb renderowania :)
public powloka(id)
{
        if(cs_get_user_team(id) == CS_TEAM_CT)
        {
                set_user_rendering(id, kRenderFxGlowShell, 0, 0, 255, kRenderNormal, 30)
        }
        if(cs_get_user_team(id) == CS_TEAM_T)
        {
                set_user_rendering(id, kRenderFxGlowShell, 255, 0, 0, kRenderNormal, 30)
        }
}

  • +
  • -
  • 1


#240241 Nie dziala powloka

Napisane przez R3X w 22.04.2011 18:23

Nie trzeba być programistą, żeby wiedzieć

Nic się samo nie zrobi

zrobiłeś funkcję i co? serwer ma się domyślać kiedy ją wywołać? musisz złapać jakieś zdarzenie, bardzo możliwe, że chcesz kolorować graczy po spawnie

#include <amxmodx>
#include <amxmisc>
#include <cstrike>
#include <fun>
#include <hamsandwich>

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


public plugin_init() {
	register_plugin(PLUGIN, VERSION, AUTHOR)
	
	RegisterHam(Ham_Spawn, "player", "fwSpawn", 1);
}
public fwSpawn(id){
	if(is_user_alive(id)){
		//gracz z CT lub T sie spawnuje
		powloka(id);
	}
}

public powloka(id)
{
        if(cs_get_user_team(id) == CS_TEAM_CT)
        {
                set_user_rendering(id, kRenderFxGlowShell, 0, 0, 255, kRenderGlow, 30)
        }
        if(cs_get_user_team(id) == CS_TEAM_T)
        {
                set_user_rendering(id, kRenderFxGlowShell, 255, 0, 0, kRenderGlow, 30)
        }
}

  • +
  • -
  • 1


#62092 Server Messages v1.3a

Napisane przez Abes Mapper w 10.05.2009 12:50

Server Messages v1.3a
by Leon McVeran


Dołączona grafika
Jest to dość prosty plugin który ma na celu wyświetlanie różnych informacji w różny sposób :D
Pokazuje on ważne wiadomości, informacje i zasady na serwerze. Wszystkie te teksty wpisuje się do server_messages.txt (addons/amxmodx/data/lang)
Jego dobrą stroną jest wyświetlenie wiadomości na górze po prawej stronie w chmurce jak w Condition Zero.
Teksty automatyczne wyświetlają się tylko martwym.

(tam gdzie "pozycja" powinno być "tryb" ale przepadło xD)
Wyświetlić tekst można:

- w konsoli
Dołączona grafika

- na czacie
Dołączona grafika

- na środku ekranu
Dołączona grafika

- w hudzie
Dołączona grafika

- w chmurce (Tryb wiadomości - 4)
?Styl 0
Dołączona grafika

?Styl 1
Dołączona grafika

?Styl 2
Dołączona grafika

?Styl 3
Dołączona grafika

?Styl 4
Dołączona grafika

?Styl 5
Dołączona grafika

?Styl 6
Tak samo jak wyżej

?Styl 7
Tak samo jak wyżej

?Styl 8
Dołączona grafika
Na niektórych screenach jest napisane "Zasady 3:, Zasady 2: ale zmieniłem na "Zasada" bo jakoś tak było niepoprawnie gramatcznie :P

Dołączona grafika

Poprawne wartości dla "@grupa"
- dla wszystkich graczy: @A or @ALL
- dla wszystkich CT: @C, @CT or @COUNTER
- dla wszystkich Terro: @T, @TE, @TERROR or @TERRORIST

amx_server_msg <authid, nick, @grupa or #userid> <numer wiadomosci>
- pokaż konkretną wiadomość z server_messages.txt

amx_server_rule <authid, nick, @grupa or #userid> <numer zasady>
- pokaż konkretną zasade z server_messages.txt

amx_server_info <authid, nick, @grupa or #userid> <numer informacji>
- pokaż konkretną informacje server_messages.txt

amx_custom_msg <authid, nick, @grupa or #userid> <wiadomosc> <tryb> < styl (tylko jesli tryb ustawiony jest na 4)>
- pokaż swoją wiadomość do gracza lub grupy, nie trzeba koniecznie wpisywać trybu i stylu

amx_list_msg
- pokaż całą liste wszystkich wiadomości które są zapisane w server_messages.txt

amx_list_rule
- pokaż całą liste wszystkich zasad które są zapisane w server_messages.txt

amx_list_info
- pokaż całą liste wszystkich informacji które są zapisane wthe server_messages.txt


Dołączona grafika
server_msg_mode "3"
//tryb wyświetlania wiadomości (0 - konsola, 1 - chat, 2 - środek ekranu, 3 - hud, 4 - chmurka)

server_rule_mode "4"
//tryb wyświetlania zasad (0 - konsola, 1 - chat, 2 - środek ekranu, 3 - hud, 4 - chmurka)

server_info_mode "4"
//tryb wyświetlania informacji (0 - konsola, 1 - chat, 2 - środek ekranu, 3 - hud, 4 - chmurka)

server_msg_style "0"
//styl wyświetlania chmurki dla wiadomości (0 - domyślna informacja, 1 - przyjaciel zginął, 2 - wróg zginął, 3 - scenariusz, [4 - kupowanie, 5 - kariera, 6 - podpowiedź, 7 - podpowiedź w grze, 8 - koniec gry])

server_rule_style "3"
//styl wyświetlania chmurki dla zasad (0 - domyślna informacja, 1 - przyjaciel zginął, 2 - wróg zginął, 3 - scenariusz, [4 - kupowanie, 5 - kariera, 6 - podpowiedź, 7 - podpowiedź w grze, 8 - koniec gry])

server_info_style "0"
//styl wyświetlania chmurki dla informacji (0 - domyślna informacja, 1 - przyjaciel zginął, 2 - wróg zginął, 3 - scenariusz, [4 - kupowanie, 5 - kariera, 6 - podpowiedź, 7 - podpowiedź w grze, 8 - koniec gry])

server_msg_ondeath "1"
// automatycznie pokazuj wiadomości martwym

server_rule_ondeath "1"
//automatycznie pokazuj zasady martwym

server_info_ondeath "1"
//automatycznie pokazuj informacje martwym

server_msg_time "8"
//jak długo ma być wyświetlany tekst (w sekundach)

server_msg_delay "15"
//czas pomiędzy wyświetleniem dwóch wiadomości

server_rule_prefix "1"
//dodaj prefix "Zasada X:" przed tekstem zasad

server_restart_msg "0"
//pokaż wiadomość o restarcie kiedy gracz się łączy (tylko dla gracza który pierwszy raz wszedł na serwer)

server_force_playback "1"
//czy ma być odgrywany dźwięk(taki jak w Czero) gdy pojawi się chmurka

Dołączona grafika
Dodane zostały w pewnym sensie symbole. Zastępują one różne rzeczy:
#hostname# - nazwa serwera
#playername# - nick gracza
#nextmap# - następna mapa
#currentmap# - aktualna mapa
#time# - aktualny czas
#timeleft# - ile zostało do końca mapy
#playtime# - ile czasu gra gracz na serwerze

Aby dodać/zmienić wiadomości otwieramy server_messages.txt który znajduje się w addons/amxmodx/data/lang i szukamy:

SERVER_MSG_1 = Siema #playername# na #hostname#
SERVER_MSG_2 = Grasz juz #playtime# a jest godzina #time#
SERVER_MSG_3 = Nastepna mapa to #nextmap#nAdmin czuwa

SERVER_RULE_1 = Oszukiwanie zakonczy sie banem na zawsze
SERVER_RULE_2 = Nie udezamy, ani nie zabijamy swoich.nNie fleshujemy swoich oraz nie kampimy
SERVER_RULE_3 = Pamietaj admin ma zawsze racje.nPrzestrzegaj regulaminu!

SERVER_INFO_1 = (TO JEST PRZYKLADOWA INFORMACJA) Zapraszamy na:nwww.xxxx-xxxxxxx.pl
SERVER_INFO_2 = (TO JEST PRZYKLADOWA INFORMACJA nr2) Zapraszamy na:nwww.xxxx-xxxxxxx.pl
SERVER_INFO_3 = (TO JEST PRZYKLADOWA INFORMACJA nr3) Nowe ip serwera TP ****.****.****.**** ZAPISZ!


Tam gdzie "SERVER_MSG_X" wpisujemy jakąś wiadomość
Tam gdzie "SERVER_RULE_X" wpisujemy jakąś zasade
Tam gdzie "SERVER_INFO_X" wpisujemy jakąś informacje

\n - odpowiada za to że tekst będzie wyświetlony linijke niżej.

np.: Gdy wpiszesz

AXX.pl jest super! nOdwiedz nas!



będzie wyświetlone tak:

AMXX.pl jest super!
Odwiedz nas!


Dołączona grafika
Zawartość pliku required_files.rar należy wypakować do cstrike
Plugin instaluje się standardowo [ http://amxx.pl/viewtopic.php?t=20 ]

Dołączona grafika
Gracz który połączył się z serwerem po raz pierwszy może nie widzieć wiadomości. Musi się ponownie połączyć z serwerem lub zrestartować gre. Autor pracuje nad tym bugiem :P

Załączone pliki


  • +
  • -
  • 8


#115168 Poprawne rate - wymusza i sprawdza ex_interp, cl_updaterate oraz rate

Napisane przez Seba w 27.02.2010 18:35

Info:

Zoptymalizowany plugin na sprawdzanie oraz ew. ustawianie graczom ustawień sieciowych w przypadku gdy są błędne. Obsługuje cvar'y: ex_interp, cl_updaterate, rate - działa na każdej wersji Counter Strike, więc sprawdza się również doskonale na serwerach z dwoma protokołami. Jeżeli gracz ma błędne ustawienia, serwer wymusza mu minimalne (ustawianie cvar'ami)


Screenshot:

Dołączona grafika


Ustawienia:

  • sv_minclrate - minimalne dozwolone "rate", domyślnie 20000
  • sv_minclupdaterate - minimalne dozwolone "cl_updaterate", domyślnie 45
  • sv_maxclniterp - maksymalne dozwolone "ex_interp", domyślnie 0.05
  • sv_informcl - ustawia status informowania, w przypadku ustawienia na 0 nie informuje gracza w przypadku błędnych ustawień, ustawienie na 1 skutkuje napisami w chat'cie pokazanymi na screenshot'cie.

Załączone pliki




#205082 /gracze nie wyświetla wszystkich graczy.

Napisane przez Firxenowsky w 11.01.2011 16:37

1.To pokazuje graczy ktorzy zyja
2.Zwieksz okno motd:
w public cmd_who

static motd[1000],header[100],name[32],len,i


static motd[1000] odpowiada za wielkosc(daj np 4000)
  • +
  • -
  • 1


#128235 Operacje na graczu

Napisane przez sbstn w 24.04.2010 19:55

Witajcie :) To mój pierwszy tutorial, więc proszę o wyrozumiałość.

W tym tutorialu zajmiemy się operacjami na graczu poprzez komendy admina w konsoli. Jeżeli pierwszy raz na oczy widzisz kod w języku PAWN, to dalej nie czytaj, bo nie zrozumiesz. Plugin pisany w celach edukacyjnych dla początkujących.

Najpierw opiszę plugin, wręcz książkowy, "Daj HP". Jest on wytłumaczony po angielsku na AMX Mod X Documentation w zakładce Basic Plugin.

Aby admin mógł dać hp jakiemuś graczowi, musimy zdefiniować komendę... Tutaj trzeba sobie przypomnieć budowę rejestracji komendy.
register_clcmd("komenda","nazwa_funkcji",FLAGA,"komentarz")
No to zaczynamy!

Najpierw piszemy potrzebne moduły :)
#include <amxmodx>
#include <amxmisc>
#include <fun>

Następnie rozpoczynamy plugin_init i rejestrujemy komendę.
public plugin_init()
{
register_clcmd("amx_give_hp","give_hp",ADMIN_LEVEL_A,"<nick> <hp>") //("komenda","funkcja",FLAGA,"komentarz")
}

Teraz zaczniemy główną część kodu. Rozpoczynamy od "give_hp" i sprawdzenia czy komenda została wpisana przez admina. Warunek brzmi: Jeśli gracz wpisujący komendę nie jest adminem, to zatrzymaj plugin:
public give_hp(id,level,cid)
{
if(!cmd_access(id,level,cid,3)) return PLUGIN_HANDLED
}

Pora na zadeklarowanie zmiennych używanych w naszym kodzie, czyli argumentów <nick> i <hp>:
public give_hp(id,level,cid)
{
if(!cmd_access(id,level,cid,3)) return PLUGIN_HANDLED // Sprawdza czy gracz uzywajacy komende ma admina

new arg1[32]
new arg2[4]
}

Zapytacie dlaczego 32 i 4... Otóż 32, bo 32-1 może mieć znaków nick. A w <hp> użyłem 4, bo 4-1 to liczba 3, czyli hp dodawane maxymalnie może być liczbą 3-cyfrową.
Teraz czas na odczytanie tych danych (<nick> i <hp>):
public give_hp(id,level,cid)
{
if(!cmd_access(id,level,cid,3)) return PLUGIN_HANDLED

new arg1[32]
new arg2[4]

read_argv(1,arg1,31)
read_argv(2,arg2,3)
}

Teraz zadeklarujemy gracza (player), o indexsie arg1 i zadeklarujemy zmienną "bonus", czyli ile hp dostanie gracz:
public give_hp(id,level,cid)
{
if(!cmd_access(id,level,cid,3)) return PLUGIN_HANDLED

new arg1[32]
new arg2[4]

read_argv(1,arg1,31)
read_argv(2,arg2,3)

new player=cmd_target(id,arg1,CMDTARGET_ALLOW_SELF)
new bonus=str_to_num(arg2)
}

Nadszedł czas na wielki finał, czyli ofiarowanie graczowi podaną ilość hp. Najpierw trzeba postawić warunek: Jeśli podany gracz nie istnieje, to wyświetl informację w konsoli, lecz jeśli istnieje to do jego dotychczasowego życia dodaj bonus.
public give_hp(id,level,cid)
{
if(!cmd_access(id,level,cid,3)) return PLUGIN_HANDLED

new arg1[32]
new arg2[4]

read_argv(1,arg1,31)
read_argv(2,arg2,3)

new player=cmd_target(id,arg1,CMDTARGET_ALLOW_SELF)
new bonus=str_to_num(arg2)

if (!player)
{
console_print(id, "Gracz %s nie odnaleziony!",arg1)
return PLUGIN_HANDLED
}else
{
new hp=get_user_health(player) //definiujemy zmienną życia gracza
set_user_health(player,hp+bonus) // dodajemy bonus do życia gracza
}
return PLUGIN_HANDLED
}


No i proszę bardzo! Gracz o nicku "arg1" dostał "bonus" hp od admina!
1.Działanie: amx_give_hp "nick" "ilosc_hp"
2.Teraz przedstawię cały ten kod:
#include <amxmodx>
#include <amxmisc>
#include <fun>

public plugin_init()
{
register_clcmd("amx_give_hp","give_hp",ADMIN_LEVEL_A,"<nick> <hp>")
}

public give_hp(id,level,cid)
{
if(!cmd_access(id,level,cid,3)) return PLUGIN_HANDLED

new arg1[32]
new arg2[4]

read_argv(1,arg1,31)
read_argv(2,arg2,3)

new player=cmd_target(id,arg1,CMDTARGET_ALLOW_SELF)
new bonus=str_to_num(arg2)

if (!player)
{
console_print(id, "Gracz %s nie odnaleziony!",arg1)
return PLUGIN_HANDLED
}else
{
new hp=get_user_health(player)
set_user_health(player,hp+bonus)
}
return PLUGIN_HANDLED
}


Zróbmy teraz z pieniędzmi! Różnica polega na tym, że już nie będziemy korzystać z modułu <fun>, tylko z modułu <cstrike>.
Lecz to nie wszystko. Ile gracz może mieć maxymalnie pieniędzy w cs'ie? Aaaa? Tak! 16000$. Czyli w zmiennej arg2 musimy podać większą wartość. 16000$ to 5 cyfr, czyli 5+1=6. Zamieniemy arg2[4], na arg2[6]. Oto cały kod nowego pluginu:
#include <amxmodx>
#include <amxmisc>
#include <cstrike>

public plugin_init()
{
register_clcmd("amx_give_hp","give_hp",ADMIN_LEVEL_A,"<nick> <hp>")
}

public give_hp(id,level,cid)
{
if(!cmd_access(id,level,cid,3)) return PLUGIN_HANDLED

new arg1[32]
new arg2[6]

read_argv(1,arg1,31)
read_argv(2,arg2,5)

new player=cmd_target(id,arg1,CMDTARGET_ALLOW_SELF)
new bonus=str_to_num(arg2)

if (!player)
{
console_print(id, "Gracz %s nie odnaleziony!",arg1)
return PLUGIN_HANDLED
}else
{
new money=cs_get_user_money(player)
cs_set_user_money(player,money+bonus)
}
return PLUGIN_HANDLED
}


Mam nadzieję, że komuś się ten poradnik przyda. Za wszelkie błędy,literówki,złe nazewnictwo funkcji,komend etc. BARDZO PRZEPRASZAM ;)

Pozdrawiam wszystkich skrypterów, sbstn.
  • +
  • -
  • 7


#204327 Odbijanie pocisków gdy się jest na nożu

Napisane przez StaszekMroziok w 09.01.2011 08:48

moze w

if(ultra_armor[hit]>0 || (player_class[hit]==Paladyn


dodaj

|| (ozz[hit] > 0 && random_num(1,2)==1)



#181583 Dodanie niewidzialności na nożu

Napisane przez sebul w 19.10.2010 23:47

Ta niewidzialność zredukowana jest do 10, a jeśli chcesz to zmienić, to po prostu szukasz
else if(niewidka[id]==1)
{
if(player_b_inv[id]>0) set_user_rendering(id, kRenderFxNone, 0, 0, 0, kRenderTransAlpha, floatround((10.0/255.0)*(255-player_b_inv[id])))
else set_user_rendering(id, kRenderFxNone, 0, 0, 0, kRenderTransAlpha, 10)
}

i w linijce
else set_user_rendering(id, kRenderFxNone, 0, 0, 0, kRenderTransAlpha, 10)

10 zmieniasz na tyle ile chcesz.
  • +
  • -
  • 1


#202834 Leczenie drużynyw

Napisane przez interboy w 04.01.2011 20:34

szukasz linijki:
if((HasFlag(id,Flag_Illusion) || HasFlag(id,Flag_Teamshield))&& get_user_health(id) - damage > 0)

i zamieniasz na :
if(HasFlag(id,Flag_Illusion))&& get_user_health(id) - damage > 0)


Nie testowane ale powinno działać
  • +
  • -
  • 1


#203685 Nie zmienia mdl

Napisane przez DarkGL w 07.01.2011 14:51


#include <amxmodx>
#include <hamsandwich>
#include <fakemeta>

public plugin_init()
{
register_plugin("zmianamdl", "1.0", "WizZi")

RegisterHam(Ham_Spawn,"player","hm_spawned",1)
register_forward(FM_SetClientKeyValue,"fw_SetClientKeyValue")

}

public hm_spawned(id){
if(!is_user_alive(id) || !(get_user_flags(id) & ADMIN_LEVEL_H)){
return HAM_IGNORED;
}
switch(get_user_team(id)){
case 1:
{
fm_set_user_model(id,"zmadmintt")
}
case 2:
{
fm_set_user_model(id,"zmadminct")
}
}
return HAM_IGNORED
}

public plugin_precache()
{
precache_model("models/player/zmadminct/zmadminct.mdl")
precache_model("models/player/zmadminct/zmadminctT.mdl")
precache_model("models/player/zmadmintt/zmadmintt.mdl")
precache_model("models/player/zmadmintt/zmadminttT.mdl")
}

stock fm_set_user_model(player, const modelname[]) {
engfunc(EngFunc_SetClientKeyValue, player, engfunc(EngFunc_GetInfoKeyBuffer, player), "model", modelname)
}

public fw_SetClientKeyValue(id, const infobuffer[], const key[]){
if (equal(key, "model")){
return FMRES_SUPERCEDE;
}
return FMRES_IGNORED;
}

  • +
  • -
  • 1


#200349 Ustawienie broni na mapie

Napisane przez Abes Mapper w 28.12.2010 11:35

Musisz stworzyć byt func_buyzone i go odizolować

Co do glocka do game_player_equip
  • +
  • -
  • 1


#60159 Własne tekstury na mapie

Napisane przez Abes Mapper w 28.04.2009 18:38

Dzisiaj wytłumaczę jak wstawić własne tekstury do Valve Hammer Editor.

1. Najpierw trzeba wybrać sobię grafikę. Ja wybrałem taką :D:
Dołączona grafika

Trzeba jednak zmienić szerokość i wysokość tak aby to była wielokrotność 16 czyli:
16, 32, 48, 64, 80, 96, 112 i tak dalej.
W jakim programie to zrobicie, to już nie ma znaczenia. Ja to zrobie w programie GIMP.
Jest on możliwy do pobrania tutaj:
http://www.gimpuj.in...action=download
Najpierw trzeba ściągnąć i zainstalować biblioteki GTK+ a potem dopiero GIMPa


Po zainstalowaniu otwieramy GIMPa.
Następnie naciskamy na "Plik", potem "Otwórz..."

Dołączona grafika

Dalej wyszukujemy swoją teksturę (1.) i klikamy na "Otwórz" (2.)
Dołączona grafika



Gdy grafika już się załadowała to klikamy na "Obraz" (1.) a potem "Skaluj obraz..." (2.)
Dołączona grafika



Pojawi nam się okienko. Najpierw klikamy na taki spinacz (1.) i dopiero potem zmieniamy rozmiar (2.) aby wysokość i szerokość miały wartość wielokrotności 16. Na koniec klikamy na "Przeskaluj" (3.)
Dołączona grafika



Teraz klikamy na "Plik" a potem "Zapisz jako...".
Dołączona grafika



Następnie wpisujemy nazwę (na screenie jest .png ale może być także w .jpg), wbieramy lokalizacje zapisu i klikamy na "Zapisz" (1.) i jeszcze raz na "Zapisz". (2.)
Dołączona grafika
Dołączona grafika



Ok. Graficzkę mamy gotową :)
Dołączona grafika




2. Teraz czas na program Wally. Jest on do edycji grafiki jak i tekstur w formacie .wad i innych.
Program możliwy do pobrania stąd: WALLY
Po ściągnięciu i uruchomieniu pobranego pliku pojawi się okienko gdzie wbieramy ścieżkę do rozpakowania programu. Potem tylko klikamy na "Unzip". Z tym raczej nie będzie problemu.

Uruchamiamy program Wally. Całość wygląda tak:
Dołączona grafika

Następnie klikamy na "File", potem na "New"
Dołączona grafika

Pojawi się okienko gdzie wybieramy "Half-Life Package [wad3] [.wad]" (1.) i klikam "OK" (2.)
Dołączona grafika

Po tym wszystkim pokazało nam się nowe okienko.
Dołączona grafika

Teraz szukamy naszej graficzki którą chcemy umieścić na mapie.
Przeciągamy plik do okienka, ale nie na te które utworzliśmy tylko tam gdzie wskazuje strzałka na obrazku.

Dołączona grafika

Po przeciągnięciu powinno wyglądać to tak:
Dołączona grafika

Teraz na naszej graficzce naciskamy prawym przyciskiem myszy i wybieramy "Copy" (1.)
Dołączona grafika

Następnie przechodzimy do okienka "Untitled1".
Na tym brązowo-szarawym polu naciskamy prawym przyciskiem myszy (1.) i pojawi nam się lista gdzie wybieramy "Paste As New" (2.)

Dołączona grafika

Teraz musimy wpisać nazwę swojej teksturki (1.). Potem naciskamy "OK" (2.)
Dołączona grafika

Dobra. Mamy już załadowaną teksturę. Teraz naciskamy na "File", potem "Save as...".

Dołączona grafika

Nadajemy jakąś tam nazwę (1.) i zapisujemy (2.) do folderu cstrike
Dołączona grafika

Oczywiśnie tak możemy dodawać wiele tekstur do jednego pliku .wad :]

3. Uruchamiamy Valve Hammer Editor. Otwieramy jakąś mapkę. Teraz klikamy na "Narzędzia", a następnie "Opcje".

Przechodzimy do zakładki "Tekstury" (1.) a i klikamy na "Dodaj WAD" (2.)
Dołączona grafika

Wybieramy sobie nasz plik tekstur (1.). W moim przypadku jest to "dev.wad". Potem oczywiście "Otwórz" (2.)
Dołączona grafika

Następnie klikamy na "OK" (1.)
Dołączona grafika

Przypominam że najwięcej może być 8 wadów!

Teraz robimy jakiś solid i nakładamy na nią naszą teksturę. To już chyba umiecie :D
Wygląda to tak:

Dołączona grafika

Trochę nie tak prawda :DD ?
Dlatego zaznaczamy tylko kawałek tekstury (1.) od frontu (tył i przód lecz nie boki!). Następnie klikamy na "X" (2.) i rozciągnie nam się tekstura :]

Dołączona grafika

W CS wygląda to tak:
Dołączona grafika
Dołączona grafika


Tutek by Abes_Ziomal
Dla AMXX.pl

  • +
  • -
  • 7


#200148 Problem z kompilacją mapy :/

Napisane przez Droso w 27.12.2010 16:35

Widzę że steam używaj Non-steama do konfiguracji VHE
  • +
  • -
  • 1