←  Pluginy

AMXX.pl: Support AMX Mod X i SourceMod

»

Jak kazać czekać przez wykonanien tej same...

  • +
  • -
naven - zdjęcie 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?
Odpowiedz

  • +
  • -
darkman - zdjęcie darkman 22.06.2009

ustawiasz flage w tasku na "a" i wybierasz ilość repeatów w ostatnim parametrze.
Odpowiedz

  • +
  • -
naven - zdjęcie 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")
}
Odpowiedz

  • +
  • -
darkman - zdjęcie darkman 22.06.2009

inaczej odstępu czasowego nie ustawisz, a pętlą wyjdzie tak samo. jedynie zeedytować plugin antiflood.
Odpowiedz

  • +
  • -
Knopers - zdjęcie Knopers 22.06.2009

Pętle zrób najlepiej for

@up Był szybszy xD
Odpowiedz

  • +
  • -
naven - zdjęcie 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:
register_concmd("amx_ss", "concmd_screen", ADMIN_BAN, "<nick> <liczba>")
Chciałbym, że po wpisaniu amx_ss 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
Odpowiedz

  • +
  • -
mgr inż. Pavulon - zdjęcie 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ć.
Odpowiedz

  • +
  • -
naven - zdjęcie 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ć
Odpowiedz

  • +
  • -
wizu - zdjęcie 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.
#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()
}
Odpowiedz

  • +
  • -
R3X - zdjęcie R3X 22.06.2009

Pomysł dobry, ale tak jest poprawnie:
#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
Odpowiedz

  • +
  • -
naven - zdjęcie naven 22.06.2009

Normalnie nie słuchacie xD(i tak się przyda do drugiego pluga o_O) po plusie

Druga rzecz mam tutaj coś takiego:
register_concmd("amx_ss", "concmd_screen", ADMIN_BAN, "<nick> <liczba>")
Chciałbym, że po wpisaniu amx_ss 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
Odpowiedz

  • +
  • -
R3X - zdjęcie 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;

}
Odpowiedz

  • +
  • -
naven - zdjęcie 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(xD):
//// 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
// ----------------------------------------
Odpowiedz

  • +
  • -
R3X - zdjęcie R3X 22.06.2009

return PLUGIN_HANDLED;
}
   
    new arg1[24], arg2[4]
usuń } :]
Odpowiedz

  • +
  • -
naven - zdjęcie naven 22.06.2009

próbowałem, wtedy jest error unreachable code...
Odpowiedz

  • +
  • -
R3X - zdjęcie 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
}
Odpowiedz

  • +
  • -
naven - zdjęcie naven 22.06.2009

Na prawdę jesteś programistą?

Nigdy nie mówiłem, że jestem... Uczyłem się z for i od was, z tego kodu nic a nic nie rozumiem :)
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")
	}
Odpowiedz

  • +
  • -
R3X - zdjęcie 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 ;P a skoro to robisz powinieneś znać przynajmniej podstawową składnię Pawna

Załączone pliki

  • Załączony plik  ss.sma   3,18 KB   29 Ilość pobrań
Odpowiedz

  • +
  • -
naven - zdjęcie naven 22.06.2009

:D, poszukam w google(podstawy programowania w pawnie?)
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
Odpowiedz

  • +
  • -
R3X - zdjęcie 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)

client_cmd(id, "kill") 
//==
user_kill(id)
Odpowiedz