Solved (ReAPI) AntiFlashLightSpam + ResetScore

Coding Help/Re-API Supported
User avatar
ArminC
Senior Member
Senior Member
Romania
Posts: 137
Joined: 6 years ago
Location: Bucharest
Contact:

(ReAPI) AntiFlashLightSpam + ResetScore

#1

Post by ArminC » 6 years ago

1. Can you make this plugin with <reapi>, optimized?

Code: Select all

#include <amxmodx>
#include <engine>

new pcvar_reload_flashlight
new Float:BlockTime[33];

public plugin_init()
{
	register_plugin("Anti FlashLight Spam", "1.2a", "Leo_[BH]")
	
	pcvar_reload_flashlight = register_cvar("flashlight_reload", "1.5")
	
	register_impulse(100, "FlashLight")
}

public FlashLight(id)
{
	new Float:gametime = get_gametime()
	
	if(BlockTime[id] <= gametime)
	{
		BlockTime[id] = gametime + get_pcvar_float(pcvar_reload_flashlight)
		return PLUGIN_CONTINUE;
	}
	
	return PLUGIN_HANDLED;
}

public client_disconnected(id)
{ 
	BlockTime[id] = 0.0; 
}
-- I did found this: (Can be optimized more than now?)

Code: Select all

#include <amxmodx>
#include <reapi>

new pcvar_reload_flashlight
new Float:BlockTime[33];

public plugin_init()
{
	register_plugin("AntiSpam FlashLight", "1.3", "Leo_[BH]")
	
	pcvar_reload_flashlight = register_cvar("flashlight_reload", "1.5")
	
	RegisterHookChain(GamedllFunc_CBasePlayer:RG_CBasePlayer_ImpulseCommands, "RG_ImpulseCommand", 0);
}

public RG_ImpulseCommand(id)
{
	if(get_entvar(id, var_impulse) != 100) return 0
	
	new Float:gametime = get_gametime()

	if(BlockTime[id] <= gametime)
	{
		BlockTime[id] = gametime + get_pcvar_float(pcvar_reload_flashlight)
		return 0
	}
	
	return 1
}

public client_disconnect(id)
{ 
	BlockTime[id] = 0.0; 
}
2. Can you fix (+optimize) this resetscore, or recommend me one better? "1) The score isn't updated in the score board when a player uses /rs when he is alive. He needs to wait one round 2) If he uses /rs when alive and then kills someone/dies his kills/deaths remain the same. Can you fix this?" @An User message

Code: Select all

#include <amxmodx>
#include <reapi>

#define PLUGIN 	"resetscore(ReAPI)"
#define VERSION "1.0"
#define AUTHOR  "Phantom"

public plugin_init() {
	register_plugin(PLUGIN, VERSION, AUTHOR);
	register_clcmd("say /rs", "resetscore"); register_clcmd("say_team /rs", "resetscore");
}

public resetscore(id) {
	if(!is_user_connected(id)) return;

	set_entvar(id, var_frags, 0.0);
	set_member(id, m_iDeaths, 0);

	message_begin(MSG_ONE_UNRELIABLE, 76, .player = id);
	write_byte(id);
	write_string("^1Счет обнулен");
	message_end();

	message_begin(MSG_ALL, 85);
	write_byte(id);
	write_short(0); write_short(0); write_short(0); write_short(0);
	message_end();
}
+ Add a sound after reset
+ Make a 30 seconds? wait time
+ A message just for user that he did reset the score (I see that's already.. but a more nicer.. with colors and tag.. and more..)

User avatar
Raheem
Mod Developer
Mod Developer
Posts: 2214
Joined: 7 years ago
Contact:

#2

Post by Raheem » 6 years ago

1. No more optimization can be done in this AntiFlashLightSpam plugin. Just if you need use client_disconnected() instead of client_disconnect(). client_disconnected() in AMXMODX v 1.8.3-dev.

2. For resetting score using ReAPI use my plugin: http://escapers-zone.net/viewforum.php?f=15
  • Sound is simple you can add any if needed.
    About delay i see it's useless as this related to player and it never flood the server.
He who fails to plan is planning to fail

User avatar
ArminC
Senior Member
Senior Member
Romania
Posts: 137
Joined: 6 years ago
Location: Bucharest
Contact:

#3

Post by ArminC » 6 years ago

Yeah I saw it but.. is for ZE..

User avatar
Night Fury
Mod Developer
Mod Developer
Posts: 677
Joined: 7 years ago
Contact:

#4

Post by Night Fury » 6 years ago

You don't need this part "GamedllFunc_CBasePlayer:".
Want your own mod edition? PM me.
Accepting private projects.
Discord: Fury#7469
Image

User avatar
Raheem
Mod Developer
Mod Developer
Posts: 2214
Joined: 7 years ago
Contact:

#5

Post by Raheem » 6 years ago

ArminC wrote: 6 years ago Yeah I saw it but.. is for ZE..
Yes for sure as we only a community for ZE. Any general support maybe private so if you so interested you to do these things you can contact me on telegram (I'm there 24/7). My telegram: https://t.me/RaheemElsayed
He who fails to plan is planning to fail

User avatar
ArminC
Senior Member
Senior Member
Romania
Posts: 137
Joined: 6 years ago
Location: Bucharest
Contact:

#6

Post by ArminC » 6 years ago

I don't have Telegram oh..

Question: what's the difference betwen:

message_begin(MSG_BROADCAST, get_user_msgid("ScoreInfo"))
write_byte(id) // id
write_short(0) // Frags
write_short(0) // Deaths
write_short(0) // Class
write_short(get_member(id, m_iTeam)) // Team
message_end()

and
message_begin(MSG_BROADCAST, 85);
write_byte(id);
write_short(0);
write_short(0);
write_short(0);
write_short(0);
message_end();

User avatar
ArminC
Senior Member
Senior Member
Romania
Posts: 137
Joined: 6 years ago
Location: Bucharest
Contact:

#7

Post by ArminC » 6 years ago

PS: Something to fix, all good :D ? #For moment it doesn't work .. because client_cmd is already defined??

Code: Select all

#include <amxmodx>
#include <reapi>

#define HIDE_CHAT_MSG 	// Hide the chat message when the player writes "/rs"
#define INFO_TEXT 		// Show the notification to the player in the chat when the account is reset
#define SOUND           // Play a sound after reset
#define RS_CHAT_MSG "^4[ZPNM] ^3Your account has been reseted!" 		// Message text for zeroing the account
 
public plugin_init()
{
	register_plugin("ResetScore", "1.1", "Leo_[BH], ArminC");

	register_clcmd("say /rs", "reset_score");
	register_clcmd("say_team /rs", "reset_score");
	register_clcmd("say /resetscore", "reset_score");
	register_clcmd("say_team /resetscore", "reset_score");

}

public reset_score(id)
{
	if(!is_user_connected(id)) return PLUGIN_CONTINUE;
	{
		set_entvar(id, var_frags, 0.0);
		set_member(id, m_iDeaths, 0);
	
		message_begin(MSG_BROADCAST, 85);
		write_byte(id);
		write_short(0); 
		write_short(0); 
		write_short(0); 
		write_short(0);
		message_end();
	}
	return PLUGIN_CONTINUE
}

#if defined INFO_TEXT
public text_reset_score(id)
ChatColorOne(id, RS_CHAT_MSG);

stock ChatColorOne(const id, const szMessage[], any:...)
{
	static szMsg[191], IdMsg; 
	vformat(szMsg, charsmax(szMsg), szMessage, 3);
	if(!IdMsg) IdMsg = get_user_msgid("SayText");
	if(!is_user_connected(id)) return 0;	
	message_begin(MSG_ONE_UNRELIABLE, IdMsg, .player = id);
	write_byte(id);
	write_string(szMsg);
	message_end();
	return 1;
}
#endif

#if defined SOUND
client_cmd(id, spk "cleanup(t20) progress(t20)");
#endif

User avatar
ArminC
Senior Member
Senior Member
Romania
Posts: 137
Joined: 6 years ago
Location: Bucharest
Contact:

#8

Post by ArminC » 6 years ago

up?

User avatar
Raheem
Mod Developer
Mod Developer
Posts: 2214
Joined: 7 years ago
Contact:

#9

Post by Raheem » 6 years ago

Rest Score ReAPI version for normal Mods: Make sure to use AMXMODX v 1.8.3 for client_print_color() function.
He who fails to plan is planning to fail

User avatar
ArminC
Senior Member
Senior Member
Romania
Posts: 137
Joined: 6 years ago
Location: Bucharest
Contact:

#10

Post by ArminC » 6 years ago

Thanks now the last 3 problems in order to escape from this plugin ^_^

- To stay without dictionary.. really :)) --> client_print_color(id, print_team_default, "^3Your score has been reset successfully^1", "RESET_SCORE") ??
* How I can add diffrent colored Tag than the rest of the text?

- For speak --> client_cmd(id, spk "cleanup(t20) progress(t20)"); (under the client_print?)

- Can you add time limit because I don't want that speak to be spammed.. thanks, don't mind on my a lot request :(

- Future edit: can you add more values than /rs? /resetscore /reset or whatever.. :roll:

User avatar
Night Fury
Mod Developer
Mod Developer
Posts: 677
Joined: 7 years ago
Contact:

#11

Post by Night Fury » 6 years ago

Here you go.
Sound has been added: client_cmd(id, "spk \"cleanup(t20) progress(t20)\"")
Dictionary file has been removed.
You can add more commands like in: new const resetScoreCommands[][]
Replace yoursound with Your own sound.

Code: Select all

#include <amxmodx>
#include <reapi>

#define MIN_FRAGS 5 // Player who has more than minimum frags will be able to reset his score but not lower
#define MIN_DEATHS 5 // Player who has more than minimum deaths will be able to reset his score but not lower

new const resetScoreCommands[][] =
{
	"/rs", "/resetscore", "/rscore", "/resets"
}

new sayCmd[64], sayTeamCmd[64], x

public plugin_init()
{
	register_plugin("Reset Score", "1.1", "Raheem")
	
	// Commands
	for (x = 0; x <= charsmax(resetScoreCommands); x++)
	{
		formatex(sayCmd, charsmax(sayCmd), "say %s", resetScoreCommands[x])
		formatex(sayTeamCmd, charsmax(sayTeamCmd), "say_team %s", resetScoreCommands[x])
		register_clcmd(sayCmd, "CmdSay")
		register_clcmd(sayTeamCmd, "CmdSay")
	}
}

public CmdSay(id)
{
	if (get_entvar(id, var_frags) > MIN_FRAGS || get_member(id, m_iDeaths) > MIN_DEATHS)
	{
		set_entvar(id, var_frags, 0.0)
		set_member(id, m_iDeaths, 0)
		
		message_begin(MSG_BROADCAST, get_user_msgid("ScoreInfo"))
		write_byte(id) // id
		write_short(0) // Frags
		write_short(0) // Deaths
		write_short(0) // Class
		write_short(get_member(id, m_iTeam)) // Team
		message_end()
		
		client_print_color(id, print_team_default, "^3Your score has been reset successfully^1.")
		client_cmd(id, "spk yoursound")
		return PLUGIN_HANDLED
	}
	
	return PLUGIN_CONTINUE
}
Want your own mod edition? PM me.
Accepting private projects.
Discord: Fury#7469
Image

User avatar
ArminC
Senior Member
Senior Member
Romania
Posts: 137
Joined: 6 years ago
Location: Bucharest
Contact:

#12

Post by ArminC » 6 years ago

Thank you, the "spk" isn't affected by the sheild/filterstuff.. right?

But it don't have the tag (like tag have color x and the chat have color y) -- client_print_color(id, print_team_default, "^4[RS]^3Your score has been reset successfully^1.")

Right?

(edit) can you set an else chat print if no required connditon achived = a message if deaths/frags lower than #definde

User avatar
Raheem
Mod Developer
Mod Developer
Posts: 2214
Joined: 7 years ago
Contact:

#13

Post by Raheem » 6 years ago

ArminC wrote: 6 years ago Thank you, the "spk" isn't affected by the sheild/filterstuff.. right?
Yes not filtered by CS. Not blocked by VALVE so it still working.
ArminC wrote: 6 years ago But it don't have the tag (like tag have color x and the chat have color y) -- client_print_color(id, print_team_default, "^4[RS]^3Your score has been reset successfully^1.")

Right?
Right like: client_print_color(id, print_team_default, "^4[RS] ^3Your score has been reset successfully^1.")
ArminC wrote: 6 years ago (edit) can you set an else chat print if no required connditon achived = a message if deaths/frags lower than #definde
Simply add it:
  • Code: Select all

    	if (get_entvar(id, var_frags) > MIN_FRAGS || get_member(id, m_iDeaths) > MIN_DEATHS)
    	{
    		set_entvar(id, var_frags, 0.0)
    		set_member(id, m_iDeaths, 0)
    		
    		message_begin(MSG_BROADCAST, get_user_msgid("ScoreInfo"))
    		write_byte(id) // id
    		write_short(0) // Frags
    		write_short(0) // Deaths
    		write_short(0) // Class
    		write_short(get_member(id, m_iTeam)) // Team
    		message_end()
    		
    		client_print_color(id, print_team_default, "^3Your score has been reset successfully^1.")
    		client_cmd(id, "spk yoursound")
    		return PLUGIN_HANDLED
    	}
    	else
    	{
    		client_print_color(id, print_team_default, "ANY THING")
    	}
He who fails to plan is planning to fail

User avatar
ArminC
Senior Member
Senior Member
Romania
Posts: 137
Joined: 6 years ago
Location: Bucharest
Contact:

#14

Post by ArminC » 6 years ago

Oh I found another one.. (why I can't think at all in first reply.. ideeas appear on the run :))

Code: Select all

client_print_color(id, print_team_default, "1[^4RS^1] ^3You don't have %s frags and %s to ^4reset ^3the score^1.")
If you didn't get it already.. how I can connect the already checked/known (from this)

Code: Select all

if (get_entvar(id, var_frags) > MIN_FRAGS || get_member(id, m_iDeaths) > MIN_DEATHS)
deaths/frags to my message (replace the %s with #define value) ?
Oh and here I can include some acces declined sounds.. (I like verrry much Half-life lol)

(edit) Can you fix this for me, just an ideea :) + add the above features? Thanks for nr.100 request :lol: (I tried more ideeas from more pawn/amxx wiki but nothing..)

Code: Select all

#include <amxmodx>
#include <reapi>

#define MIN_FRAGS 2 // Player who has more than minimum frags will be able to reset his score but not lower.
#define MIN_DEATHS 2 // Player who has more than minimum deaths will be able to reset his score but not lower.

new const resetScoreCommands[][] =
{
	"/rs", "/resetscore", "/reset", "/rscore", "/resets"
}

new sayCmd[64], sayTeamCmd[64], x

public plugin_init()
{
	register_plugin("Reset Score", "1.1", "Raheem")
	
	// Commands
	for (x = 0; x <= charsmax(resetScoreCommands); x++)
	{
		formatex(sayCmd, charsmax(sayCmd), "say %s", resetScoreCommands[x])
		formatex(sayTeamCmd, charsmax(sayTeamCmd), "say_team %s", resetScoreCommands[x])
		register_clcmd(sayCmd, "CmdSay")
		register_clcmd(sayTeamCmd, "CmdSay")
	}
}

public CmdSay(id)
{
	static iFloodTime[33], systime;
	if (iFloodTime[id] > (systime = get_systime()))
	{
		client_print_color(id, print_team_default, "^1[^4RS^1] ^3To ^4reset ^3the score, wait %d seconds.^1.", iFloodTime[id] - systime);
	} 
	else if (get_entvar(id, var_frags) > MIN_FRAGS || get_member(id, m_iDeaths) > MIN_DEATHS)
	{
		set_entvar(id, var_frags, 0.0)
		set_member(id, m_iDeaths, 0)
		
		message_begin(MSG_BROADCAST, get_user_msgid("ScoreInfo"))
		write_byte(id) // id
		write_short(0) // Frags
		write_short(0) // Deaths
		write_short(0) // Class
		write_short(get_member(id, m_iTeam)) // Team
		message_end()
		
		client_print_color(id, print_team_default, "^1[^4RS^1] ^3Your score has been ^4reset^1.")
		client_cmd(id, "spk ^"cleanup(t20) terminated(t20)^"")
		
		iFloodTime[id] = systime + 20;
		
		return PLUGIN_HANDLED

	else
	{
		client_print_color(id, print_team_default, "1[^4RS^1] ^3You don't have %s frags and %s in order to ^4reset ^3the score^1.")
		client_cmd(id, "spk ^"cleanup(t20) denied(t20)^"")
	}

	return PLUGIN_CONTINUE
}

User avatar
Raheem
Mod Developer
Mod Developer
Posts: 2214
Joined: 7 years ago
Contact:

#15

Post by Raheem » 6 years ago

Yes, You can include any sounds in Valve/sound folder without any problem and not needed to precache them.

Second thing: You should know that %i is used for integer and %s used for string arrays. You may read more about it, It's explained well here: https://www.codingunit.com/printf-forma ... ted-output and note that these specifiers used when you need to send a Chat, Text HUD Message ... etc.
So in your code this:
    1. client_print_color(id, print_team_default, "1[^4RS^1] ^3You don't have %s frags and %s deaths in order to ^4reset ^3the score^1.")
Should be:
    1. client_print_color(id, print_team_default, "1[^4RS^1] ^3You don't have %i frags and %i deaths in order to ^4reset ^3the score^1.", MIN_FRAGS, MIN_DEATHS)
He who fails to plan is planning to fail

User avatar
ArminC
Senior Member
Senior Member
Romania
Posts: 137
Joined: 6 years ago
Location: Bucharest
Contact:

#16

Post by ArminC » 6 years ago

Ah, ok I understand.. I wasn't sure what letter to put after %..

I put the string but as I said eariler.. I can't code it correctly.. any help? -- until now I did have if + else now I have 3 scenarios and I don't know how to make it to work..

Code: Select all

#include <amxmodx>
#include <reapi>

#define MIN_FRAGS 2 // Player who has more than minimum frags will be able to reset his score but not lower.
#define MIN_DEATHS 2 // Player who has more than minimum deaths will be able to reset his score but not lower.
#define FLOODTIME 20

new const resetScoreCommands[][] =
{
	"/rs", "/resetscore", "/reset", "/rscore", "/resets"
}

new sayCmd[64], sayTeamCmd[64], x

public plugin_init()
{
	register_plugin("Reset Score", "1.1", "Raheem")
	
	// Commands
	for (x = 0; x <= charsmax(resetScoreCommands); x++)
	{
		formatex(sayCmd, charsmax(sayCmd), "say %s", resetScoreCommands[x])
		formatex(sayTeamCmd, charsmax(sayTeamCmd), "say_team %s", resetScoreCommands[x])
		register_clcmd(sayCmd, "CmdSay")
		register_clcmd(sayTeamCmd, "CmdSay")
	}
}

public CmdSay(id)
{
	static iFloodTime[33], systime;
	if (iFloodTime[id] > (systime = get_systime()))
	{
		client_print_color(id, print_team_default, "^1[^4RS^1] ^3To ^4reset ^3the score, wait %d seconds.^1.", iFloodTime[id] - systime);
	} 
	else if (get_entvar(id, var_frags) > MIN_FRAGS || get_member(id, m_iDeaths) > MIN_DEATHS)
	{
		set_entvar(id, var_frags, 0.0)
		set_member(id, m_iDeaths, 0)
		
		message_begin(MSG_BROADCAST, get_user_msgid("ScoreInfo"))
		write_byte(id) // id
		write_short(0) // Frags
		write_short(0) // Deaths
		write_short(0) // Class
		write_short(get_member(id, m_iTeam)) // Team
		message_end()
		
		client_print_color(id, print_team_default, "^1[^4RS^1] ^3Your score has been ^4reset^1.")
		client_cmd(id, "spk ^"cleanup(t20) terminated(t20)^"")
		
		iFloodTime[id] = systime + FLOODTIME; 
		
		return PLUGIN_HANDLED

	else
	{
		client_print_color(id, print_team_default, "1[^4RS^1] ^3You don't have minimum %i frags and %i deaths to ^4reset ^3the score^1.", MIN_FRAGS, MIN_DEATHS)
		client_cmd(id, "spk ^"cleanup(t20) denied(t20)^"")
	}

	return PLUGIN_CONTINUE
}}
// C:\Users\armin\Desktop\Compiler\reset_score.sma(56) : warning 225: unreachable code
// C:\Users\armin\Desktop\Compiler\reset_score.sma(56) : warning 217: loose indentation
// C:\Users\armin\Desktop\Compiler\reset_score.sma(56) : error 029: invalid expression, assumed zero
// C:\Users\armin\Desktop\Compiler\reset_score.sma(63) : warning 209: function "CmdSay" should return a value
(because that 2nd else?)
Last edited by ArminC 6 years ago, edited 1 time in total.

User avatar
Night Fury
Mod Developer
Mod Developer
Posts: 677
Joined: 7 years ago
Contact:

#17

Post by Night Fury » 6 years ago

Missing } before last 2nd else.
Want your own mod edition? PM me.
Accepting private projects.
Discord: Fury#7469
Image

User avatar
ArminC
Senior Member
Senior Member
Romania
Posts: 137
Joined: 6 years ago
Location: Bucharest
Contact:

#18

Post by ArminC » 6 years ago

wtf? That's all a misstype.. omfg.. I didn't see it lool (and I searched over 10 topics :\ )

User avatar
Raheem
Mod Developer
Mod Developer
Posts: 2214
Joined: 7 years ago
Contact:

#19

Post by Raheem » 6 years ago

Hmm, Not need to search next time you read the error not warning. Error which will not allow compiler to compile but warning not important to fix. So if you read reset_score.sma(56) : error 029: invalid expression, assumed zero this mean in line 56 there is an invalid expression which jack tells you about it it's the missing closing bracket.

If compiler with smart enough to detect these things like missing bracket '}' or parentheses ')' and fix it .. but it's not smart so you should review your code and concentrate.
He who fails to plan is planning to fail

User avatar
ArminC
Senior Member
Senior Member
Romania
Posts: 137
Joined: 6 years ago
Location: Bucharest
Contact:

#20

Post by ArminC » 6 years ago

Code: Select all

#include <amxmodx>
#include <reapi>

#define CHAT			// Message in chat when the score is reseted.
#define SOUND 			// Audio speak when the score is rested.
#define FLOODTIME 20	// Block reusing resetscore for defined seconds.
#define MIN_FRAGS 2 	// Player who has more than minimum frags will be able to reset his score but not lower.
#define MIN_DEATHS 2 	// Player who has more than minimum deaths will be able to reset his score but not lower.

new const resetScoreCommands[][] =
{
	"/rs", "/resetscore", "/reset", "/rscore", "/resets"
}

new sayCmd[64], sayTeamCmd[64], x

public plugin_init()
{
	register_plugin("Reset Score", "1.1", "Raheem")
	
	// Commands
	for (x = 0; x <= charsmax(resetScoreCommands); x++)
	{
		formatex(sayCmd, charsmax(sayCmd), "say %s", resetScoreCommands[x])
		formatex(sayTeamCmd, charsmax(sayTeamCmd), "say_team %s", resetScoreCommands[x])
		register_clcmd(sayCmd, "CmdSay")
		register_clcmd(sayTeamCmd, "CmdSay")
	}
}

public CmdSay(id)
{
	#if defined FLOODTIME
	static iFloodTime[33], systime;
	if (iFloodTime[id] > (systime = get_systime()))
	{
		#if defined CHAT
		client_print_color(id, print_team_default, "^1[^4RS^1] ^3To ^4reset ^3the score, wait %d seconds.^1.", iFloodTime[id] - systime);
		#endif
	} 
	#endif
	else if (get_entvar(id, var_frags) > MIN_FRAGS || get_member(id, m_iDeaths) > MIN_DEATHS)
	{
		set_entvar(id, var_frags, 0.0)
		set_member(id, m_iDeaths, 0)
		
		message_begin(MSG_BROADCAST, get_user_msgid("ScoreInfo"))
		write_byte(id) // id
		write_short(0) // Frags
		write_short(0) // Deaths
		write_short(0) // Class
		write_short(get_member(id, m_iTeam)) // Team
		message_end()
		
		#if defined CHAT
		client_print_color(id, print_team_default, "^1[^4RS^1] ^3Your score has been ^4reset^1.")
		#endif
		#if defined SOUND
		client_cmd(id, "spk ^"cleanup(t20) terminated(t20)^"")
		#endif
		
		#if defined FLOODTIME
		iFloodTime[id] = systime + FLOODTIME; 
		#endif
		
		return PLUGIN_HANDLED
	}
	else
	{
		#if defined CHAT
		client_print_color(id, print_team_default, "1[^4RS^1] ^3You don't have minimum %i frags and %i deaths to ^4reset ^3the score^1.", MIN_FRAGS, MIN_DEATHS)
		#endif
		#if defined SOUND
		client_cmd(id, "spk ^"cleanup(t20) denied(t20)^"")
		#endif
	}

	return PLUGIN_CONTINUE
}
That's my final code :o It's final or could be re-sized to be smaller (more efficient?)

Anyway what return PLUGIN_CONTINUE+HANDLED do?

Post Reply

Create an account or sign in to join the discussion

You need to be a member in order to post a reply

Create an account

Not a member? register to join our community
Members can start their own topics & subscribe to topics
It’s free and only takes a minute

Register

Sign in

Who is online

Users browsing this forum: No registered users and 3 guests