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.
|
Itachi
Rejestracja: 31.01.2011Aktualnie: Nieaktywny
Poza forum Ostatnio: 09.07.2012 13:11





Statystyki
- Grupa: Użytkownik
- Całość postów: 41
- Odwiedzin: 3 397
- Tytuł: Pomocny
- Wiek: 28 lat
- Urodziny: Sierpień 24, 1996
-
Imię
Lukasz
-
Płeć
Mężczyzna
-
Lokalizacja
Warszawa
Kontakt
Narzędzia użytkownika
Znajomi
Itachi nie posiada znajomych
#429146 Link do bytów
Napisane przez DarkGL
w 06.07.2012 12:50
http://amxx.pl/topic...-do-scriptingu/
engfunc wywołuje odpowiednie funkcje silnika gry opis parametrów znajdziesz w fakemeta_const
#424149 [ROZWIĄZANE] Warukni IF - Filozofia ...
Napisane przez
Gość
w 25.06.2012 12:25
Tutaj masz opisane użycie returnów, nie będę powielał tematu.
if(!g_resp[id]){Taki kod w zupełności wystarczy.
if(get_user_flags(id) & ADMIN_LEVEL_ B){
client_print(id, print_center, "Jestes adminem, masz opcje dostepne poza respem")
return PLUGIN_CONTINUE;
} else {
return PLUGIN_HANDLED;
}
}
Jeśli pierwszy warunek sprawdził, że gracz nie jest na respie, to ponowne sprawdzanie go wewnątrz tego ifa jest zbędne.
Jeśli warunek
!(get_user_flags(id) & ADMIN_LEVEL_ B)nie został spełniony, to nie musisz na nowo sprawdzać
if (get_user_flags(id) & ADMIN_LEVEL_Bbo wynika to z niespełnienia poprzedniego warunku, zatem z całego
else if (get_user_flags(id) & ADMIN_LEVEL_B && !g_resp[id])wystarczy samo if.
#423584 [ROZWIĄZANE] Zapytanie do give_weapon
Napisane przez GwynBleidD
w 23.06.2012 16:23

#423631 [ROZWIĄZANE] Zapytanie do give_weapon
Napisane przez DarkGL
w 23.06.2012 19:02
#423662 [ROZWIĄZANE] Zapytanie do give_weapon
Napisane przez sebul
w 23.06.2012 19:50
new wpname[32];
get_weaponname(get_user_weapon(id), wpname, 31);
engclient_cmd(id, "drop", wpname);
tylko po prostu trzeba najpierw sprawdzić, czy gracz ma już jakąś broń, ale od tego jest chociażby mój stock w gotowych funkcjach. A żeby się nie bugowało, to po prostu tak jak wyżej, dać taska z małym opóźnieniem na danie broni.
#423002 [ROZWIĄZANE] Zapytanie do give_weapon
Napisane przez dasiek
w 22.06.2012 07:29
#422842 [ROZWIĄZANE] Zapytanie do give_weapon
Napisane przez DarkGL
w 21.06.2012 18:28
#298741 Krotsza mozliwosc zapisu
Napisane przez ^Grzyboo
w 21.09.2011 19:23
/* Plugin generated by AMXX-Studio */
#include <amxmodx>
#include <amxmisc>
#define PLUGIN "Plugin do rate"
#define VERSION "1.0"
#define AUTHOR "Shakira"
/*
1- Ex_Interp 0.01
2- Ex_Interp 0.02
3- Ex_Interp 0.03
4- Ex_Interp 0.04
5- Ex_Interp 0.05
6- Menu wyboru
*/
new intoption[33];
public plugin_init() {
register_plugin(PLUGIN, VERSION, AUTHOR)
register_event("HLTV", "Nowa_Runda", "a", "1=0", "2=0")
}
public Nowa_Runda(id)
{
if (!intoption[id])
{
wybierzinterp(id)
return PLUGIN_HANDLED;
}
set_hudmessage (0, 255, 255, -1.0, 0.1, 2, 2.0, 5.0, -1)
show_hudmessage(0, "Ex_Interp i rate Zostaly automatycznie ustawione ")
client_cmd(id, "ex_interp 0.0%d", intoption[id])
client_cmd(id, "cl_irate 25000")
return PLUGIN_HANDLED;
}
public client_putinserver(id){
intoption[id] = 0;
}
public wybierzinterp(id){
new menuinterp=menu_create("Jaki wybierasz interp?","cbwybierzinterp");
menu_additem(menuinterp,"Ex_interp 0.01");
menu_additem(menuinterp,"Ex_interp 0.02");
menu_additem(menuinterp,"Ex_interp 0.03");
menu_additem(menuinterp,"Ex_interp 0.04");
menu_additem(menuinterp,"Ex_interp 0.05");
menu_display(id, menuinterp,0);
return PLUGIN_HANDLED;
}
public cbwybierzinterp(id, menu, item)
{
intoption[id] = item+1;
menu_destroy(menu);
return PLUGIN_HANDLED;
}
Try this
#109357 Natywy
Napisane przez R3X
w 03.02.2010 00:34
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
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ł

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

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
-
Natywy.rar 1,65 KB 330 Ilość pobrań
#285946 true i false
Napisane przez
Dwdov
w 21.08.2011 12:01
if( tutaj_warunek_ze_wybral_jeden )
wybraljeden[id][1] = true
else
wybraljeden[id][1] = false
Cała filozofia, nie rozumiem z czym tu można mieć problem. Tylko przy deklaracji zmiennej
new bool:wybraljeden[33][4]
(numerki w klamrach sobie tak o wymyśliłem)
#257884 Funkcja Inteligencji
Napisane przez Goliath
w 11.06.2011 17:26
Ham_TakeDamage - wybrany event z hamsandwich (od niego zależą następne parametry),
pid - id gracza otrzymującego obrażenia,
ent - id bytu uszkadzającego,
attacker - id gracza zadającego obrażenia,
90.0+float(inteligencja_gracza[attacker]) - wartość obrażeń, podana we floacie,
1 - dodatkowe flagi.
#257021 Co jest odpowiedzialne za bind?
Napisane przez Goliath
w 08.06.2011 18:49
#256988 Co jest odpowiedzialne za bind?
Napisane przez Goliath
w 08.06.2011 17:07
public EmitSound(id, iChannel, szSound[], Float:fVol, Float:fAttn, iFlags, iPitch )
{
if(equal(szSound, "common/wpn_denyselect.wav"))
{
UzyjPrzedmiotu(id);
return FMRES_SUPERCEDE;
}
return FMRES_IGNORED;
}
Czyli w skrócie - gdy graczowi odtworzy się dźwięk common/wpn_denyselect.wav (a tak się dzieje po naciśnięciu klawisza "E"), uruchomiona zostanie funkcja z odpalaniem rakiet itd.
#211321 array index out of bounds (variable "player_class
Napisane przez LogiCC :D
w 31.01.2011 16:07
Po 2. Jak rozdajesz staty to nie pisze jaki skill co robi, bo linijka była za długa.
Po 3. Masz bardzo bardzo namieszane w kodzie.
Po 4. Naprawiłem 2-5 błędy.
Załączone pliki
-
Newdiablomod_by_ItachI2.sma 249,42 KB 62 Ilość pobrań
Newdiablomod_by_ItachI2.amxx
- AMXX.pl: Support AMX Mod X i SourceMod
- → Przeglądanie profilu: Reputacja: Itachi
- Regulamin