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.
|
Return a return PLUGIN_, kiedy używać ?
#1
Napisano 30.08.2012 20:29
Czy wlasnie przez zly return moge miec bledy "run time error 3: stack error" ?
Wysłane z Samsunga Galaxy GT-I5510
#2
Napisano 30.08.2012 20:44
Wiem tyle że return; lub return PLUGIN_HANDLED; zatrzymuje wykonanie funkcji w miejscu gdzie jest wpisany return.
DarkGL to mój autorytet.
skomplikować skomplikować skomplikować skomplikować skomplikować skomplikować skomplikować skomplikować skomplikować skomplikować skomplikować skomplikować skomplikować skomplikować
#3
Napisano 30.08.2012 20:48
HANDLED - jak chcesz zablokować coś w grze [nie chodzi o funkcje] chodzi o np. kupowanie broni, bo jakbyś wstawił CONTINUE to się wywoła.
CONTINUE - wywołuje jak chce zablokować wywołanie funkcji. [np. gracz jest nie zywy, wiec blokuje to CONTINUE
HANDLED - blokowanie eventów silnika
CONTINUE - blokowanie wywołania funkcji, ale nie blokuje wydarzeń. [wywołujesz najczęściej w warunkach gdzie sprawdzasz gracza [zywotnosc etc.]]
Możesz także zwrócić samo return, ale chyba działanie jest takie same(?) [podobne(?)] jak CONTINUE.
Możliwe, że to ostatnio zdanie to głupota Zawsze uzywam albo Han/Con. [chyba ze zwracam cos w natywie :D]
Użytkownik HubertTM edytował ten post 30.08.2012 20:53
Piszę pluginy pod: AMX MOD X oraz SOURCE MOD!
Na zlecenie i bez zlecenia zresztą też!
#4
Napisano 30.08.2012 20:57
If you can dream it, you can do it.
#5
Napisano 30.08.2012 20:59
Chcesz wysłać do mnie PW ? użyj nazwy GoQ zamiast G[o]Q
Chcesz Kupić moduł płatności via Pukawka,Tserwery, Gamesol, Zabijaka do mojego sklepu? napisz PW cena to tylko 10 zł/sztuka
GG:6022845 (nie pomagam za free osobom ponizej rangi MoD)
#6
Napisano 30.08.2012 21:04
Wysłane z Samsunga Galaxy GT-I5510
#7
Napisano 30.08.2012 21:07
Posiadam TBM (inaczej PTB), które działa dużo lepiej niż zwykłe PTB, nawet na modach z lvlami. Zainteresowany? Proszę bardzo
#8
Napisano 30.08.2012 21:09
public WybuchInit(id) { if(!is_user_connected(id)) return PLUGIN_CONTINUE; wybuchnie[id] = false new Float:fOrigin[3], iOrigin[3]; entity_get_vector( id, EV_VEC_origin, fOrigin); iOrigin[0] = floatround(fOrigin[0]); iOrigin[1] = floatround(fOrigin[1]); iOrigin[2] = floatround(fOrigin[2]); message_begin(MSG_BROADCAST,SVC_TEMPENTITY, iOrigin); write_byte(TE_EXPLOSION); write_coord(iOrigin[0]); write_coord(iOrigin[1]); write_coord(iOrigin[2]); write_short(sprite_blast); write_byte(32); write_byte(20); write_byte(0); message_end(); new entlist[MAX + 1]; new numfound = find_sphere_class(id, "player", 400.0 , entlist, 32); for (new i=0; i < numfound; i++) { new pid = entlist[i]; if (is_user_alive(pid) && get_user_team(id) != get_user_team(pid) && is_user_connected(pid)) UTIL_Kill(id, pid, float(get_user_health(pid)), DMG_BULLET) } user_silentkill(id); return PLUGIN_CONTINUE; }
Użytkownik =ToRRent= edytował ten post 31.08.2012 12:03
#9
Napisano 31.08.2012 12:07
#10
Napisano 31.08.2012 14:29
#define PLUGIN_CONTINUE 0 /* Results returned by public functions */
#define PLUGIN_HANDLED 1 /* stop other plugins */
#define PLUGIN_HANDLED_MAIN 2 /* to use in client_command(), continue all plugins but stop the command */
(przepraszam że to ciągnę, ale jak już jest temat to skorzystam )
Czy "return;" nie zwraca nic czy zwraca 0 - czyli PLUGIN_CONTINUE ?
DarkGL to mój autorytet.
skomplikować skomplikować skomplikować skomplikować skomplikować skomplikować skomplikować skomplikować skomplikować skomplikować skomplikować skomplikować skomplikować skomplikować
#11
Napisano 31.08.2012 14:55
W twoim kodzie wystarczy samo return ale różnicy to żadniej nie robi.
No to prosty przykład podam z użyciem HANDLED i CONTINUE
/* Script generated by Pawn Studio */
#include <amxmodx>
#include <amxmisc>
#define PLUGIN "New Plugin"
#define AUTHOR "Unknown"
#define VERSION "1.0"
public plugin_init()
{
register_plugin(PLUGIN, VERSION, AUTHOR);
register_clcmd("say Admin!", "Admin");
}
public Admin(id)
{
if(get_user_flags(id) & ADMIN_BAN) //jezeli jestesmy adminem to:
return PLUGIN_HANDLED; // zwracamy HANDLED wiec blokujemy komende co skutkuje tym ze nie pojawi sie na say-u
return PLUGIN_CONTINUE; // pawn jest tak napisany ze jezeli zwracamy cos w funkcji to na koncu tez musiby cos zwrocic
//czyli skoro nie jestesmy adminem to napis zostanie normalnie wyswietlony
}
#12 Gość_21977_*
Napisano 31.08.2012 22:51
- PLUGIN_CONTINUE zwracasz, by po prostu zakończyć działanie funkcji.
Zwrócenie tej wartości nic ponad przerwaniem wywołania funkcji, nie zmienia. - PLUGIN_HANDLED zwracasz, by uniemożliwić dalsze wykonanie danej komendy,
danego zdarzenia czy innego hooka. Przerwany hook nie objawi się ani w grze
ani w żadnym z kolejnych wywołań hooka, także w innych pluginach. - PLUGIN_HANDLED_MAIN zwracasz, by uniemożliwić dalsze wykonanie danej komendy,
danego zdarzenia czy innego hooka jedynie w silniku gry podczas, gdy każde kolejne
wywołanie hooka, także przez inne pluginy, będzie dalej możliwe do wykonania.
- PLUGIN_CONTINUE nie robi nic,
- PLUGIN_HANDLED przerywa dalsze działanie i dla silnika i dla innych pluginów
- PLUGIN_HANDLED_MAIN przerywa działanie tylko dla silnika, nie dla innych pluginów
Mając przykładowo takie pluginy:
#include <amxmodx>
public plugin_init(){
register_plugin("no say", "0.1", "test");
register_clcmd("say","say");
}
public say(id){
return PLUGIN_HANDLED;
}
#include <amxmodx>
public plugin_init(){
register_plugin("clean say", "0.1", "test");
register_clcmd("say","say");
}
public say(id){
new Speech[192];
read_args(Speech,191);
remove_quotes(Speech);
if(is_user_alive(id) && equali(Speech, "brzydkie_slowo")){
user_kill(id);
return PLUGIN_HANDLED;
}
return PLUGIN_CONTINUE;
}
Pierwszy plugin całkowicie blokuje say (PLUGIN_HANDLED), drugi natomiast blokuje jedynie brzydkie słowa (PLUGIN_HANDLED),
karząc śmiercią, pozostałe zaś przepuszczając (pozwalając na ich wypowiedzenie) (PLUGIN_CONTINUE).
Jeśli pierwszy plugin będzie u góry, to najpierw zostanie wysłana wartość PLUGIN_HANDLED, która drugiemu pluginowi
nie pozwoli ukarać śmiercią w przypadku brzydkich słów (wcześniej została zwrócona wartość PLUGIN_HANDLED).
Jeśli pluginy byłyby w odwrotnej kolejności, to brzydkie słowa
zostałyby nagrodzone śmiercią, a cały say i tak zablokowany.
To był przykład na istotę kolejności dodawanych pluginów w plugins.ini w powiązaniu z tematyką wątku.
#13
Napisano 01.09.2012 09:21
I na to wychodzi że wina jest po stronie amxx 1.8.1 bo nikt nic nie pisze że public który podałem zawiera błędy
Użytkownicy przeglądający ten temat: 0
0 użytkowników, 0 gości, 0 anonimowych