Jump to content
Sign in to follow this  
rzeRO

Suport - ad_manager

Recommended Posts

Server : rze.rangfort.ro

Nick : RZE
Grad server : Manager
La ce doriţi ajutor? :  am o problema cu ad_manager.amxx imi apar mesajele dupa 3-4 minute de la inceperea mapei, intervalul de timp este setat la 30 de secunde dar degeaba.

Poză cu problema (Nu este obligatoriu) : -

 

Share this post


Link to post
Share on other sites

ad_manager.sma

/*  ad_manager.sma
*   tDk* - Studio
*   Pentru mai multe detalii despre acest plugin intra pe #
*   Contact - aln_ty@yahoo.com
*/

#include <amxmodx>
#include <amxmisc>

#pragma semicolon 1

new const PLUGIN[] = "Autoresponder/Advertiser";
new const VERSION[] = "0.5";
new const AUTHOR[] = "MaximusBrood";

#define NORM_AD 0
#define SAY_AD 1

#define COND 0
#define STORE 1

#define COND_TKN '%'
#define SAY_TKN '@'

#define COND_STKN "%"
#define DEVIDE_STKN "~"
#define SAY_STKN "@"

//-.-.-.-.-.-.-.-.DEFINES.-.-.-.-.-.-.-.-.-.-.

//Maximum amount of ads
#define MAXADS 64

//Minimum difference between two different ads (float)
new const Float:RAND_MIN = 30.0;

//Maximum difference between two different ads (float)
new const Float:RAND_MAX = 30.0;

//-.-.-.-.-.-.-.-.END DEFINES..-.-.-.-.-.-.-.

//Stores
new sayConditions[MAXADS][3][32];
new normConditions[MAXADS][3][32];
new normStore[MAXADS][128];
new sayStore[MAXADS][2][128];

new gmsgSayText;

//Counters
new adCount[2] = {0, 0};

public plugin_init() {
	register_plugin(PLUGIN, VERSION, AUTHOR);
	register_cvar("admanager_version", "0.5", FCVAR_SERVER);
	
	register_cvar("ad_react_all", "1");
	
	gmsgSayText = get_user_msgid("SayText");
	
	register_clcmd("say","eventSay");
	register_clcmd("say_team","eventSay");
	
	//Delay the load proces by 10 sec because we don't want to get more load
	//on the already high-load mapchange.
	//Too soon to affect players while playing, too late to create time-out @ mapchange
	set_task(10.0, "load");
}

public load()
{
	//Load the data
	new filepath[64];
	get_configsdir(filepath, 63);
	format(filepath, 63, "%s/advertisements.ini", filepath);
	
	if(file_exists(filepath))
	{
		new output[512], conditions[128], temp[64], type;
		
		//Open file
		new fHandle = fopen(filepath, "rt");
		
		//Checks for failure
		if(!fHandle)
			return;
		
		//Loop through all lines
		for(new a = 0; a < MAXADS && !feof(fHandle); a++)
		{
			//Get line
			fgets(fHandle, output, 511);
			
			
			//Work away comments
			if(output[0] == ';' || !output[0] || output[0] == ' ' || output[0] == 10) 
			{
				//Line is not counted
				a--;
				continue;
			}
			
			//Reset type
			type = 0;
			
			//Check if it contains conditions
			if(output[0] == COND_TKN)
			{
				//Cut the conditions off the string
				split(output, conditions, 127, output, 511, DEVIDE_STKN);
				
				//Determine if its say check or normal ad
				type = output[0] == SAY_TKN ? 1 : 0;
				
				//Put the conditions in own space
				for(new b = 0; b < 3; b++)
				{
					new sort[16], cond[32], numb;
					
					//Remove the % from line 
					conditions[0] = ' ';
					trim(conditions);
					
					//Get one condition from the line
					split(conditions, temp, 64, conditions, 127, COND_STKN);
					
					split(temp, sort, 15, cond, 31, " ");
					
					if(equali(sort, "map"))
					{
						numb = 0;
					} else if(equali(sort, "min_players"))
					{
						numb = 1;
					} else if(equali(sort, "max_players"))
					{
						numb = 2;
					} else
					{
						continue;
					}
					
					//Copy it to its final resting place ^^
					setString(COND, type, cond, adCount[type], numb);
					
					//Exit if it hasn't got more conditions
					if(!conditions[0])
						break;
				}
			}
			
			if(type == 0)
				type = output[0] == SAY_TKN ? 1 : 0;
			
			if(type == SAY_AD)
			{
				new said[32], answer[128];
				
				//Remove the @ from line
				output[0] = ' ';
				trim(output);
				
				split(output, said, 31, answer, 127, DEVIDE_STKN);
				
				//Apply color
				setColor(answer, 127);
				
				//Save it
				setString(STORE, SAY_AD, said, adCount[SAY_AD], 0);
				setString(STORE, SAY_AD, answer, adCount[SAY_AD], 1);
			} else//if(type == NORM_AD)
			{
				//Apply color
				setColor(output, 511);
				
				//Save it
				setString(STORE, NORM_AD, output, adCount[NORM_AD]);
			}
			
			//Increment the right counter
			adCount[NORM_AD] += type == NORM_AD ? 1 : 0;
			adCount[SAY_AD]  += type == SAY_AD  ? 1 : 0;
		}
		
		//Set a first task, if there are any normal ads
		if(adCount[NORM_AD] != 0)
			set_task(random_float(RAND_MIN, RAND_MAX), "eventTask");
		
		//Close file to prevent lockup
		fclose(fHandle);	
	}
}

new currAd = -1;

public eventTask()
{
	//Go past all ads and check conditions
	for(new a = 0; a < adCount[NORM_AD]; a++)
	{
		//Put current ad to the next one
		currAd = currAd == adCount[NORM_AD] - 1 ? 0 : currAd + 1;
		
		if(checkConditions(currAd, NORM_AD))
		{
			//Display the ad
			new data[3];
			data[0] = currAd;
			data[1] = NORM_AD;
			data[2] = 0;
			displayAd(data);
			
			break;
		}
	}
		
	//Set a new task
	set_task(random_float(RAND_MIN, RAND_MAX), "eventTask");
	
	return PLUGIN_CONTINUE;
}

public eventSay(id)
{
	//If nothing is said, don't check
	if(adCount[SAY_AD] == 0)
		return PLUGIN_CONTINUE;
	
	new talk[64], keyword[16];
	read_args(talk, 63) ;
		
	//En nu rennen voor jullie zakgeld klootzjakken!
	for(new a = 0; a < adCount[SAY_AD]; a++)
	{
		//Get the string
		getString(STORE, SAY_AD, keyword, 15, a, 0);
		
		if(containi(talk, keyword) != -1)
		{
			//Check the rest if it fails to conditions
			if(!checkConditions(a, SAY_AD))
				continue;
			
			new data[3];
			data[0] = a;
			data[1] = SAY_AD;
			data[2] = id;
			
			//Set the task
			set_task(0.3, "displayAd", 0, data, 3);
			
			//Don't execute more of them
			break;
		}
	}
	
	return PLUGIN_CONTINUE;
}

public displayAd(params[])
{
	//Get the string that is going to be displayed
	new message[128];
	getString(STORE, params[1], message, 127, params[0], params[1]);
	
	//If its enabled by cvar and id is set, display to person who triggered message only
	if(get_cvar_num("ad_react_all") == 0 && params[2] != 0)
	{
		message_begin(MSG_ONE, gmsgSayText, {0,0,0}, params[2]);
		write_byte(params[2]);
		write_string(message);
		message_end();
	
	} else
	{
		//Display the message to everyone
		new plist[32], playernum, player;
		
		get_players(plist, playernum, "c");
	
		for(new i = 0; i < playernum; i++)
		{
			player = plist[i];
			
			message_begin(MSG_ONE, gmsgSayText, {0,0,0}, player);
			write_byte(player);
			write_string(message);
			message_end();
		}
	}
	
	return PLUGIN_HANDLED;
}

//---------------------------------------------------------------------------
//                                STOCKS
//---------------------------------------------------------------------------

stock checkConditions(a, type)
{
	//Mapname
	if((type == NORM_AD && normConditions[a][0][0]) || (type == SAY_AD && sayConditions[a][0][0]))
	{
		new mapname[32];
		get_mapname(mapname, 31);
		
		if(! (type == NORM_AD && equali(mapname, normConditions[a][0]) ) || (type == SAY_AD && equali(mapname, sayConditions[a][0]) ) )
			return false;
	}
	
	//Min Players
	if((type == NORM_AD && normConditions[a][1][0]) || (type == SAY_AD && sayConditions[a][1][0]))
	{
		new playersnum = get_playersnum();
		
		if( (type == NORM_AD && playersnum < str_to_num(normConditions[a][1]) ) || (type == SAY_AD && playersnum < str_to_num(sayConditions[a][1]) ) )
			return false;
	}
	
	//Max Players
	if((type == NORM_AD && normConditions[a][2][0]) || (type == SAY_AD && sayConditions[a][2][0]))
	{
		new playersnum = get_playersnum();
		
		if( (type == NORM_AD && playersnum > str_to_num(normConditions[a][2]) ) || (type == SAY_AD && playersnum > str_to_num(sayConditions[a][2]) ) )
			return false;
	}
	
	//If everything went fine, return true
	return true;
}	

stock setColor(string[], len)
{
	if (contain(string, "!t") != -1 || contain(string, "!g") != -1 || contain(string,"!n") != -1)
	{
		//Some nice shiny colors ^^
		replace_all(string, len, "!t", "^x03");
		replace_all(string, len, "!n", "^x01");
		replace_all(string, len, "!g", "^x04");
		
		//Work away a stupid bug
		format(string, len, "^x01%s", string);
	}
}

stock getString(mode, type, string[], len, one, two = 0)
{
	//server_print("mode: %d type: %d len: %d one: %d two %d", mode, type, len, one, two);
	
	//Uses the fact that a string is passed by reference
	if(mode == COND)
	{
		if(type == NORM_AD)
		{
			copy(string, len, normConditions[one][two]);
		} else//if(type = SAY_AD)
		{
			copy(string, len, sayConditions[one][two]);
		}
	} else//if(mode == STORE)
	{
		if(type == NORM_AD)
		{
			copy(string, len, normStore[one]);
		} else//if(type == SAY_AD)
		{
			copy(string, len, sayStore[one][two]);
		}
	}
}

stock setString(mode, type, string[], one, two = 0)
{
	if(mode == COND)
	{
		if(type == NORM_AD)
		{
			copy(normConditions[one][two], 31, string);
		} else//if(type = SAY_AD)
		{
			copy(sayConditions[one][two], 31, string);
		}
	} else//if(mode == STORE)
	{
		if(type == NORM_AD)
		{
			copy(normStore[one], 127, string);
		} else//if(type == SAY_AD)
		{
			copy(sayStore[one][two], 127, string);
		}
	}
}
  • Like 1

Share this post


Link to post
Share on other sites

Salut.din moment ce nu ti-a raspuns nimeni am sa-ti las eu mai jos o solutie la cererea ta,

Modifica-ti mesajele dupa bunul plac direct din sursa.

 

#include <amxmodx>
#include <amxmisc>
 
#define PLUGIN "Show Messages"
#define VERSION "1.0"
#define AUTHOR "marvel_team"
 
#define ADVERTISING_TIME 30.0
 
stock const messages[][] = {
   "^x03 Pentru cereri de admin ,reclamatii sau sugestii acceseaza ^x04 http://www.rangfort.ro/sectiunea MARVEL",
   "^x03 Injuriile la adresa adminilor se pedepsesc cu ^x04[kick\ban 120min]",
   "^x03 Nick-urile dvs. trebuie sa contina minim 3 caractere",
   "^x03 Limbajul vulgar/neordonat/deranjant sau jigniri pe server se sanctioneaza cu Gag 3-5 minute",
   "^x03 Reclamele la alte servere,site-uri,forumuri pe server se sanctioneaza cu ban permanent !"
 
 
   
}
 
 
public plugin_init() {
   register_plugin(PLUGIN, VERSION, AUTHOR)
   
   set_task(ADVERTISING_TIME, "show_messages", _, _, _,"b");
}
 
public show_messages()
{
   new Buffer[256];
   formatex(Buffer, sizeof Buffer - 1, "^x04%s", messages[random(sizeof messages)]);
   
   new players[32], num, id;
   get_players(players, num);
   
   for(new i = 0 ; i < num ; i++)
   {
      id = players
     
      message_begin(MSG_ONE, get_user_msgid("SayText"), _, id);
      write_byte(id);
      write_string(Buffer);
      message_end();
   }
}
 
Nu am avut timp sa-l testez ,dar ar trebui sa functioneze corect :)
Mesajele vor rula undeva la 30 secunde cum ai cerut

Share this post


Link to post
Share on other sites

uite aici un plugin testat de mine 

 

 

#include <amxmodx>
#include <amxmisc>
 
#pragma semicolon 1
 
new const PLUGIN[] = "Autoresponder/Advertiser";
new const VERSION[] = "0.5";
new const AUTHOR[] = "MaximusBrood";
 
#define NORM_AD 0
#define SAY_AD 1
 
#define COND 0
#define STORE 1
 
#define COND_TKN '%'
#define SAY_TKN '@'
 
#define COND_STKN "%"
#define DEVIDE_STKN "~"
#define SAY_STKN "@"
 
//-.-.-.-.-.-.-.-.DEFINES.-.-.-.-.-.-.-.-.-.-.
 
//Maximum amount of ads
#define MAXADS 64
 
//Minimum difference between two different ads (float)
new const Float:RAND_MIN = 60.0;
 
//Maximum difference between two different ads (float)
new const Float:RAND_MAX = 80.0;
 
//-.-.-.-.-.-.-.-.END DEFINES..-.-.-.-.-.-.-.
 
//Stores
new sayConditions[MAXADS][3][32];
new normConditions[MAXADS][3][32];
new normStore[MAXADS][128];
new sayStore[MAXADS][2][128];
 
new gmsgSayText;
 
//Counters
new adCount[2] = {0, 0};
 
public plugin_init() {
register_plugin(PLUGIN, VERSION, AUTHOR);
register_cvar("admanager_version", "0.5", FCVAR_SERVER);
 
register_cvar("ad_react_all", "1");
 
gmsgSayText = get_user_msgid("SayText");
 
register_clcmd("say","eventSay");
register_clcmd("say_team","eventSay");
 
//Delay the load proces by 10 sec because we don't want to get more load
//on the already high-load mapchange.
//Too soon to affect players while playing, too late to create time-out @ mapchange
set_task(10.0, "load");
}
 
public load()
{
//Load the data
new filepath[64];
get_configsdir(filepath, 63);
format(filepath, 63, "%s/advertisements.ini", filepath);
 
if(file_exists(filepath))
{
new output[512], conditions[128], temp[64], type;
 
//Open file
new fHandle = fopen(filepath, "rt");
 
//Checks for failure
if(!fHandle)
return;
 
//Loop through all lines
for(new a = 0; a < MAXADS && !feof(fHandle); a++)
{
//Get line
fgets(fHandle, output, 511);
 
 
//Work away comments
if(output[0] == ';' || !output[0] || output[0] == ' ' || output[0] == 10) 
{
//Line is not counted
a--;
continue;
}
 
//Reset type
type = 0;
 
//Check if it contains conditions
if(output[0] == COND_TKN)
{
//Cut the conditions off the string
split(output, conditions, 127, output, 511, DEVIDE_STKN);
 
//Determine if its say check or normal ad
type = output[0] == SAY_TKN ? 1 : 0;
 
//Put the conditions in own space
for(new b = 0; b < 3; b++)
{
new sort[16], cond[32], numb;
 
//Remove the % from line 
conditions[0] = ' ';
trim(conditions);
 
//Get one condition from the line
split(conditions, temp, 64, conditions, 127, COND_STKN);
 
split(temp, sort, 15, cond, 31, " ");
 
if(equali(sort, "map"))
{
numb = 0;
} else if(equali(sort, "min_players"))
{
numb = 1;
} else if(equali(sort, "max_players"))
{
numb = 2;
} else
{
continue;
}
 
//Copy it to its final resting place ^^
setString(COND, type, cond, adCount[type], numb);
 
//Exit if it hasn't got more conditions
if(!conditions[0])
break;
}
}
 
if(type == 0)
type = output[0] == SAY_TKN ? 1 : 0;
 
if(type == SAY_AD)
{
new said[32], answer[128];
 
//Remove the @ from line
output[0] = ' ';
trim(output);
 
split(output, said, 31, answer, 127, DEVIDE_STKN);
 
//Apply color
setColor(answer, 127);
 
//Save it
setString(STORE, SAY_AD, said, adCount[sAY_AD], 0);
setString(STORE, SAY_AD, answer, adCount[sAY_AD], 1);
} else//if(type == NORM_AD)
{
//Apply color
setColor(output, 511);
 
//Save it
setString(STORE, NORM_AD, output, adCount[NORM_AD]);
}
 
//Increment the right counter
adCount[NORM_AD] += type == NORM_AD ? 1 : 0;
adCount[sAY_AD]  += type == SAY_AD  ? 1 : 0;
}
 
//Set a first task, if there are any normal ads
if(adCount[NORM_AD] != 0)
set_task(random_float(RAND_MIN, RAND_MAX), "eventTask");
 
//Close file to prevent lockup
fclose(fHandle);
}
}
 
new currAd = -1;
 
public eventTask()
{
//Go past all ads and check conditions
for(new a = 0; a < adCount[NORM_AD]; a++)
{
//Put current ad to the next one
currAd = currAd == adCount[NORM_AD] - 1 ? 0 : currAd + 1;
 
if(checkConditions(currAd, NORM_AD))
{
//Display the ad
new data[3];
data[0] = currAd;
data[1] = NORM_AD;
data[2] = 0;
displayAd(data);
 
break;
}
}
 
//Set a new task
set_task(random_float(RAND_MIN, RAND_MAX), "eventTask");
 
return PLUGIN_CONTINUE;
}
 
public eventSay(id)
{
//If nothing is said, don't check
if(adCount[sAY_AD] == 0)
return PLUGIN_CONTINUE;
 
new talk[64], keyword[16];
read_args(talk, 63) ;
 
//En nu rennen voor jullie zakgeld klootzjakken!
for(new a = 0; a < adCount[sAY_AD]; a++)
{
//Get the string
getString(STORE, SAY_AD, keyword, 15, a, 0);
 
if(containi(talk, keyword) != -1)
{
//Check the rest if it fails to conditions
if(!checkConditions(a, SAY_AD))
continue;
 
new data[3];
data[0] = a;
data[1] = SAY_AD;
data[2] = id;
 
//Set the task
set_task(0.3, "displayAd", 0, data, 3);
 
//Don't execute more of them
break;
}
}
 
return PLUGIN_CONTINUE;
}
 
public displayAd(params[])
{
//Get the string that is going to be displayed
new message[128];
getString(STORE, params[1], message, 127, params[0], params[1]);
 
//If its enabled by cvar and id is set, display to person who triggered message only
if(get_cvar_num("ad_react_all") == 0 && params[2] != 0)
{
message_begin(MSG_ONE, gmsgSayText, {0,0,0}, params[2]);
write_byte(params[2]);
write_string(message);
message_end();
 
} else
{
//Display the message to everyone
new plist[32], playernum, player;
 
get_players(plist, playernum, "c");
 
for(new i = 0; i < playernum; i++)
{
player = plist;
 
message_begin(MSG_ONE, gmsgSayText, {0,0,0}, player);
write_byte(player);
write_string(message);
message_end();
}
}
 
return PLUGIN_HANDLED;
}
 
//---------------------------------------------------------------------------
//                                STOCKS
//---------------------------------------------------------------------------
 
stock checkConditions(a, type)
{
//Mapname
if((type == NORM_AD && normConditions[a][0][0]) || (type == SAY_AD && sayConditions[a][0][0]))
{
new mapname[32];
get_mapname(mapname, 31);
 
if(! (type == NORM_AD && equali(mapname, normConditions[a][0]) ) || (type == SAY_AD && equali(mapname, sayConditions[a][0]) ) )
return false;
}
 
//Min Players
if((type == NORM_AD && normConditions[a][1][0]) || (type == SAY_AD && sayConditions[a][1][0]))
{
new playersnum = get_playersnum();
 
if( (type == NORM_AD && playersnum < str_to_num(normConditions[a][1]) ) || (type == SAY_AD && playersnum < str_to_num(sayConditions[a][1]) ) )
return false;
}
 
//Max Players
if((type == NORM_AD && normConditions[a][2][0]) || (type == SAY_AD && sayConditions[a][2][0]))
{
new playersnum = get_playersnum();
 
if( (type == NORM_AD && playersnum > str_to_num(normConditions[a][2]) ) || (type == SAY_AD && playersnum > str_to_num(sayConditions[a][2]) ) )
return false;
}
 
//If everything went fine, return true
return true;
}
 
stock setColor(string[], len)
{
if (contain(string, "!t") != -1 || contain(string, "!g") != -1 || contain(string,"!n") != -1)
{
//Some nice shiny colors ^^
replace_all(string, len, "!t", "^x03");
replace_all(string, len, "!n", "^x01");
replace_all(string, len, "!g", "^x04");
 
//Work away a stupid bug
format(string, len, "^x01%s", string);
}
}
 
stock getString(mode, type, string[], len, one, two = 0)
{
//server_print("mode: %d type: %d len: %d one: %d two %d", mode, type, len, one, two);
 
//Uses the fact that a string is passed by reference
if(mode == COND)
{
if(type == NORM_AD)
{
copy(string, len, normConditions[one][two]);
} else//if(type = SAY_AD)
{
copy(string, len, sayConditions[one][two]);
}
} else//if(mode == STORE)
{
if(type == NORM_AD)
{
copy(string, len, normStore[one]);
} else//if(type == SAY_AD)
{
copy(string, len, sayStore[one][two]);
}
}
}
 
stock setString(mode, type, string[], one, two = 0)
{
if(mode == COND)
{
if(type == NORM_AD)
{
copy(normConditions[one][two], 31, string);
} else//if(type = SAY_AD)
{
copy(sayConditions[one][two], 31, string);
}
} else//if(mode == STORE)
{
if(type == NORM_AD)
{
copy(normStore[one], 127, string);
} else//if(type == SAY_AD)
{
copy(sayStore[one][two], 127, string);
}
}
}
 
si advertisements.ini :
 
;Syntax:
; !g for green text
; !t for teamcolor text; blue for CT, red for T and white for Spectator
; !n for normal yellow text
;
; Begin your line with an @ to make it a response text
; You can use colors in your reaction
;
; @what to react on~reaction
; Conditions: Put each condition between % and devide conditions and the rest with a ~
; The supported conditions are "map, "min_players" and "max_players"
;
; Some examples are included:
;
If there is a cheater in the server, please notify the admin -> !tuse teamspeak, and begin your message with an @
%map cs_assault%~!gNo camping at LAMPS, HIGH BOXES, OR CONTAINERS inside bunker! !nOr and admin might kill you!
@cheat~!gIf there is a cheater in the server, please notify the admin -> !tuse teamspeak and begin your message with an @
 
sper sa te ajute
  • Like 1

Share this post


Link to post
Share on other sites

Am rezolvat, multumesc.

Puteti da T/C

Share this post


Link to post
Share on other sites
Guest
This topic is now closed to further replies.
Sign in to follow this  

×