Jak kazać czekać przez wykonanien tej same...
naven
22.06.2009
Witam, chcę wymusić na graczu, aby pisał na czacie coś 5 razy, tylko że mam problem bo jest stop flooding the server, da się jakoś ustawić odstęp czy mam się męczyć z taskami?
darkman
22.06.2009
ustawiasz flage w tasku na "a" i wybierasz ilość repeatów w ostatnim parametrze.
naven
22.06.2009
Ale mi chodziło żeby się już z taskami nie bawić... wygląda to tak
public zabij(player) { client_cmd(player, "kill") cs_set_user_team(player,CS_TEAM_SPECTATOR); client_cmd(player, "say ADMIN ZROBIL MI SCREENY!!!") //to ma być 5 razy client_cmd(player, "say ADMIN ZROBIL MI SCREENY!!!") client_print(player, print_chat, "Pokaz screeny na ********-odbanujemy") client_print(player, print_chat, "Pokaz screeny na ********-odbanujemy") client_print(player, print_chat, "Pokaz screeny na ********-odbanujemy") client_print(player, print_chat, "Pokaz screeny na ********-odbanujemy") client_print(player, print_chat, "Pokaz screeny na ********-odbanujemy") }
darkman
22.06.2009
inaczej odstępu czasowego nie ustawisz, a pętlą wyjdzie tak samo. jedynie zeedytować plugin antiflood.
naven
22.06.2009
@up sry za linki;p jakoś mi wyleciało
no nic, zostawię 2, aż takie ważne to nie jest
a jeszcze jedna rzecz mam tutaj coś takiego:
bez liczby od razu robiło się(1 robi 5 ss 5-robi 25 czego chce uniknąć), lub żeby po prostu dało się tylko amx_ss naven 1
no nic, zostawię 2, aż takie ważne to nie jest
a jeszcze jedna rzecz mam tutaj coś takiego:
register_concmd("amx_ss", "concmd_screen", ADMIN_BAN, "<nick> <liczba>")Chciałbym, że po wpisaniu amx_ss
mgr inż. Pavulon
22.06.2009
A nie możesz przed wiadomością pobrać cvar'a amx_flood_time, zmienić go na małą wartość(albo najlepiej dać 0), wysłać tekst i zmienić go na poprzednią wartość ?
Albo zapausować plugin antyflood'owy przed a po odpauseować.
Albo zapausować plugin antyflood'owy przed a po odpauseować.
naven
22.06.2009
A nie możesz przed wiadomością pobrać cvar'a amx_flood_time, zmienić go na małą wartość(albo najlepiej dać 0), wysłać tekst i zmienić go na poprzednią wartość ?
Albo zapausować plugin antyflood'owy przed a po odpauseować.
Nie warto aż tak się bawić
wizu
22.06.2009
Może coś w tym stylu? Pisałem na szybko, nie mam teraz jak sprawdzić. W każdym bądź razie powinno działać
Po wpisaniu "say /napisz" wyświetli każdemu 5x tekst. Będzie wyglądał tak jakby to napisał ten, kto wpisał /napisz.
Po wpisaniu "say /napisz" wyświetli każdemu 5x tekst. Będzie wyglądał tak jakby to napisał ten, kto wpisał /napisz.
#include <amxmodx> new SayMsg public plugin_init() { register_plugin("5x wyswietl", "1.0", "wizu") SayMsg = get_user_msgid("SayText"); register_clcmd("say /napisz", "napisz") } public napisz(id) { new name[33], text[301] get_user_name(id, name, 32) if( !is_user_alive(id) ) format( text, 300, "*DEAD* ^x03%s: ADMIN ZROBIL MI SCREENY!!!", name) else format( text, 300, "^x03%s: ADMIN ZROBIL MI SCREENY!!!", name) for(new i = 1; i<= 5; i++) { for(new j = 1; j<= 32; j++) { if( is_user_connected(j) ) color_chat(j, text) } } } stock color_chat(id, const message[]) { new msg[192] formatex(msg, 191, message) message_begin(MSG_ONE, SayMsg, _, id) write_byte(id) write_string(msg) message_end() }
R3X
22.06.2009
Pomysł dobry, ale tak jest poprawnie:
Edit.
Wersja z formatowaniem
#include <amxmodx> #include <amxmisc> #define PLUGIN "Spam" #define VERSION "1.1.1" #define AUTHOR "R3X" new gmsgSayText; public plugin_init() { register_plugin(PLUGIN, VERSION, AUTHOR) gmsgSayText=get_user_msgid("SayText"); register_clcmd("spam", "test"); } public test(id){ Spam(id,5, "jestem botem numer %d",id); return PLUGIN_HANDLED; } Spam(id, hmany=1, const szMsg[], any:...){ new szMessage[192]; vformat(szMessage, 191, szMsg, 4); new isAlive=is_user_alive(id); for(new i=0;i<hmany;i++){ message_begin(MSG_ALL, gmsgSayText,{0,0,0},id); write_byte(id); write_string(isAlive?"#Cstrike_Chat_All" :"#Cstrike_Chat_AllDead"); write_string(""); write_string(szMessage); message_end(); } }
Edit.
Wersja z formatowaniem
naven
22.06.2009
Normalnie nie słuchacie (i tak się przyda do drugiego pluga ) po plusie
Druga rzecz mam tutaj coś takiego:
bez liczby od razu robiło się(1 robi 5 ss 5-robi 25 czego chce uniknąć), lub żeby po prostu dało się tylko amx_ss naven 1
Druga rzecz mam tutaj coś takiego:
register_concmd("amx_ss", "concmd_screen", ADMIN_BAN, "<nick> <liczba>")Chciałbym, że po wpisaniu amx_ss
R3X
22.06.2009
public plugin_init() { register_plugin(PLUGIN, VERSION, AUTHOR) register_concmd("amx_ss", "concmd_screen", ADMIN_BAN, "<nick> [liczba]") } public concmd_screen(id, level, cid){ if(!cmd_access(id, level, cid, 2)) return PLUGIN_HANDLED; new szTarget[32], iTarget=0; read_argv(1, szTarget, 31); iTarget=cmd_target(id, szTarget); if(iTarget==0) return PLUGIN_HANDLED; get_user_name(iTarget, szTarget, 31); new iCount=1; if(read_argc() >= 3){ new szCount[10]; read_argv(2, szCount, 9); iCount=str_to_num(szCount); } client_print(id, print_chat,"%s dostal %d ssow", szTarget, iCount*5); return PLUGIN_HANDLED; }
naven
22.06.2009
#include <amxmodx> #include <amxmisc> #include <cstrike> new player new ip[32] new maxscreens //max nr of ss to a player new screeninterval //interval between 2 ss public plugin_init() { register_plugin("Ultimate SS", "1.3", "Hack & naven") register_concmd("amx_ss", "concmd_screen", ADMIN_BAN, "<nick>") register_clcmd("say /ip", "show_ip") maxscreens = register_cvar("amx_ss_max", "1") screeninterval = register_cvar("amx_ss_interval", "1.0") } public concmd_screen(id, level, cid){ if(!cmd_access(id, level, cid, 2)) return PLUGIN_HANDLED; new szTarget[32], iTarget=0; read_argv(1, szTarget, 31); iTarget=cmd_target(id, szTarget); if(iTarget==0) return PLUGIN_HANDLED; get_user_name(iTarget, szTarget, 31); new iCount=1; if(read_argc() >= 3){ new szCount[10]; read_argv(2, szCount, 9); iCount=str_to_num(szCount); } client_print(id, print_chat,"%s dostal %d ssow", szTarget, iCount*5); return PLUGIN_HANDLED; } new arg1[24], arg2[4] read_argv(1, arg1, 23) read_argv(2, arg2, 3) new screens = str_to_num(arg2) new maxss = get_pcvar_num(maxscreens) if(screens > maxss) //too many ss { console_print(id, "[SS]Prea multe poze!") return PLUGIN_HANDLED } player = cmd_target(id, arg1, 1) if (!player) //the player has exited the sv or he didnt existed { return PLUGIN_HANDLED } new Float:interval = get_pcvar_float(screeninterval) //a set_task for each "amx_ss nickname nr_of_ss" new array[2] array[0] = id //save usefull data in a vector so it can be reused array[1] = player set_task(interval, "ss_propriuzis", 0, array,2, "a", screens) return PLUGIN_HANDLED } public ss_propriuzis(array[2]) { new player = array[1] new id = array[0] new timestamp[32], timestampmsg[128], name[32], adminname[32] get_time("%m/%d/%Y - %H:%M:%S", timestamp, 31) get_user_name(player, name, 31) get_user_name(id, adminname, 31) get_user_ip(player, ip, 31) { set_hudmessage(player, 255, 0, -1.0, 0.3, 0, 0.25, 1.0, 5.0, 0.0, 4) format(timestampmsg, 127, "** GRACZ %s CZAS: - %s **",name,timestamp) show_hudmessage(player, timestampmsg) set_task(1.0, "zrob_ss", player, _, _, "a", 5) set_task(6.0, "zabij") //client_print(0, print_chat, "** ADMIN ZROBIL SCREENY ^"%s^" GRACZOWI ^"%s^" (%s) **", adminname, name, timestamp) } console_print(id, "[SS]%s IP %s!",name,ip) console_print(id, "[SS]%s IP %s!",name,ip) console_print(id, "[SS]%s IP %s!",name,ip) } public show_ip(id) { console_print(id, "[SS]Last Stored IP: %s!",ip) } public zrob_ss(player) { client_cmd(player, "snapshot") } public zabij() { client_cmd(player, "say ADMIN ZROBIL MI SCREENY!!!") client_cmd(player, "say ADMIN ZROBIL MI SCREENY!!!") client_cmd(player, "kill") cs_set_user_team(player,CS_TEAM_SPECTATOR); client_print(player, print_chat, "Pokaz screeny na xx-odbanujemy") client_print(player, print_chat, "Pokaz screeny na dasd-odbanujemy") client_print(player, print_chat, "Pokaz screeny na cdasd-odbanujemy") client_print(player, print_chat, "Pokaz screeny na cs-dasdas.eu-odbanujemy") client_print(player, print_chat, "Pokaz screeny na dasd.eu-odbanujemy") }
wygląda tak, a errory tak():
//// screen.sma // C:Documents and SettingskompPulpitcompilerscreen.sma(44) : error 021: sy mbol already defined: "read_argv" // C:Documents and SettingskompPulpitcompilerscreen.sma(49) : error 010: in valid function or declaration // C:Documents and SettingskompPulpitcompilerscreen.sma(51) : error 055: st art of function body without function header // C:Documents and SettingskompPulpitcompilerscreen.sma(54) : error 010: in valid function or declaration // C:Documents and SettingskompPulpitcompilerscreen.sma(57) : error 010: in valid function or declaration // C:Documents and SettingskompPulpitcompilerscreen.sma(58) : error 010: in valid function or declaration // C:Documents and SettingskompPulpitcompilerscreen.sma(60) : error 010: in valid function or declaration // C:Documents and SettingskompPulpitcompilerscreen.sma(65) : error 010: in valid function or declaration // C:Documents and SettingskompPulpitcompilerscreen.sma(69) : error 010: in valid function or declaration // C:Documents and SettingskompPulpitcompilerscreen.sma(118) : warning 203: symbol is never used: "arg1" // C:Documents and SettingskompPulpitcompilerscreen.sma(118) : warning 203: symbol is never used: "array" // C:Documents and SettingskompPulpitcompilerscreen.sma(118) : warning 203: symbol is never used: "interval" // C:Documents and SettingskompPulpitcompilerscreen.sma(118) : warning 203: symbol is never used: "maxss" // C:Documents and SettingskompPulpitcompilerscreen.sma(118) : warning 203: symbol is never used: "screens" // // 9 Errors. // Could not locate output file compiledscreen.amx (compile failed). // // Compilation Time: 0,12 sec // ----------------------------------------
R3X
22.06.2009
Na prawdę jesteś programistą? przecież return kończy wywołanie funkcji, reszta kodu nigdy nie będzie wykonana i na to zwraca uwagę komunikat.
public concmd_screen(id, level, cid){ if(!cmd_access(id, level, cid, 2)) return PLUGIN_HANDLED; new szTarget[32], iTarget=0; read_argv(1, szTarget, 31); iTarget=cmd_target(id, szTarget); if(iTarget==0) return PLUGIN_HANDLED; get_user_name(iTarget, szTarget, 31); new iCount=1; if(read_argc() >= 3){ new szCount[10]; read_argv(2, szCount, 9); iCount=str_to_num(szCount); } iCount*=5; client_print(id, print_chat,"%s dostal %d ssow", szTarget, iCount); new maxss = get_pcvar_num(maxscreens) if(iCount > maxss) //too many ss { console_print(id, "[SS] za duzo screenow!") return PLUGIN_HANDLED } new Float:interval = get_pcvar_float(screeninterval) //a set_task for each "amx_ss nickname nr_of_ss" new array[2] array[0] = id //save usefull data in a vector so it can be reused array[1] = iTarget set_task(interval, "ss_propriuzis", 0, array,2, "a", iCount) return PLUGIN_HANDLED }
naven
22.06.2009
Nigdy nie mówiłem, że jestem... Uczyłem się z for i od was, z tego kodu nic a nic nie rozumiemNa prawdę jesteś programistą?
Kod działa, ale plugin przestał robić ss... Podmieniłem tym całą funkcję concmd_screen
#include <amxmodx> #include <amxmisc> #include <cstrike> new player new ip[32] new maxscreens //max nr of ss to a player new screeninterval //interval between 2 ss public plugin_init() { register_plugin("Ultimate SS", "1.3", "Hack & naven") register_concmd("amx_ss", "concmd_screen", ADMIN_BAN, "<nick>") register_clcmd("say /ip", "show_ip") maxscreens = register_cvar("amx_ss_max", "1") screeninterval = register_cvar("amx_ss_interval", "1.0") } public concmd_screen(id, level, cid){ if(!cmd_access(id, level, cid, 2)) return PLUGIN_HANDLED; new szTarget[32], iTarget=0; read_argv(1, szTarget, 31); iTarget=cmd_target(id, szTarget); if(iTarget==0) return PLUGIN_HANDLED; get_user_name(iTarget, szTarget, 31); new iCount=1; if(read_argc() >= 3){ new szCount[10]; read_argv(2, szCount, 9); iCount=str_to_num(szCount); } iCount*=5; client_print(id, print_chat,"%s dostal %d ssow", szTarget, iCount); new maxss = get_pcvar_num(maxscreens) if(iCount > maxss) //too many ss { console_print(id, "[SS] za duzo screenow!") return PLUGIN_HANDLED } new Float:interval = get_pcvar_float(screeninterval) //a set_task for each "amx_ss nickname nr_of_ss" new array[2] array[0] = id //save usefull data in a vector so it can be reused array[1] = iTarget set_task(interval, "ss_propriuzis", 0, array,2, "a", iCount) return PLUGIN_HANDLED } public ss_propriuzis(array[2]) { new player = array[1] new id = array[0] new timestamp[32], timestampmsg[128], name[32], adminname[32] get_time("%m/%d/%Y - %H:%M:%S", timestamp, 31) get_user_name(player, name, 31) get_user_name(id, adminname, 31) get_user_ip(player, ip, 31) { set_hudmessage(player, 255, 0, -1.0, 0.3, 0, 0.25, 1.0, 5.0, 0.0, 4) format(timestampmsg, 127, "** GRACZ %s CZAS: - %s **",name,timestamp) show_hudmessage(player, timestampmsg) set_task(1.0, "zrob_ss", player, _, _, "a", 5) set_task(6.0, "zabij") //client_print(0, print_chat, "** ADMIN ZROBIL SCREENY ^"%s^" GRACZOWI ^"%s^" (%s) **", adminname, name, timestamp) } console_print(id, "[SS]%s IP %s!",name,ip) console_print(id, "[SS]%s IP %s!",name,ip) console_print(id, "[SS]%s IP %s!",name,ip) } public show_ip(id) { console_print(id, "[SS]Last Stored IP: %s!",ip) } public zrob_ss(player) { client_cmd(player, "snapshot") } public zabij() { client_cmd(player, "say ADMIN ZROBIL MI SCREENY!!!") client_cmd(player, "say ADMIN ZROBIL MI SCREENY!!!") client_cmd(player, "kill") cs_set_user_team(player,CS_TEAM_SPECTATOR); client_print(player, print_chat, "Pokaz screeny na cdass.eu-odbanujemy") client_print(player, print_chat, "Pokaz screeny na cdasu-odbanujemy") client_print(player, print_chat, "Pokaz screeny na cdasdeu-odbanujemy") client_print(player, print_chat, "Pokaz screeny na dasd-odbanujemy") client_print(player, print_chat, "Pokaz screeny nadsas.eu-odbanujemy") }
R3X
22.06.2009
Poprawiłem co wymagało poprawy, ale jeszcze należałoby go udoskonalić (sprawdzać taski).
Skoro zmieniasz kod źródłowy pluginu tak, by działał inaczej/lepiej to programujesz a skoro to robisz powinieneś znać przynajmniej podstawową składnię Pawna
Skoro zmieniasz kod źródłowy pluginu tak, by działał inaczej/lepiej to programujesz a skoro to robisz powinieneś znać przynajmniej podstawową składnię Pawna
Załączone pliki
naven
22.06.2009
, poszukam w google(podstawy programowania w pawnie?)
plugin oczywiście działa, tylko nie rozumiem jeszcze jednej rzeczy
mam tak
nie chce tego przy client_cmd snapshot bo właśnie dlatego przerabiam plugin- żeby gracz do ostatniej chwili nie wiedział że admin robi mu ss
plugin oczywiście działa, tylko nie rozumiem jeszcze jednej rzeczy
mam tak
client_cmd(player, "say ADMIN ZROBIL MI SCREENY!!!") client_cmd(player, "say ADMIN ZROBIL MI SCREENY!!!") client_cmd(player, "kill") cs_set_user_team(player,CS_TEAM_SPECTATOR); }najpierw jest client cmd say a potem set user team spectator a w grze wygląda to tak, że jest kill, usadzanie na spekta a dopiero potem say jak już gracz na spekcie(efekt- inni gracze nie będą widzieć, na czym mi zależy)
nie chce tego przy client_cmd snapshot bo właśnie dlatego przerabiam plugin- żeby gracz do ostatniej chwili nie wiedział że admin robi mu ss
R3X
22.06.2009
z client_cmd() to chyba będziesz musiał zrobić osobny task, np. 5.5 say 6.0 kill
co do Pawna -> http://wiki.amxmodx....ting_(AMX_Mod_X)
co do Pawna -> http://wiki.amxmodx....ting_(AMX_Mod_X)
client_cmd(id, "kill") //== user_kill(id)