Could you accept this simple plugin and tell me to add something?
Code:
#include <amxmodx>
#include <amxmisc>
#include <nvault>
#pragma semicolon 1
new bool:Spy[33], NoPM[33], Blocked[33][33];
new SpyVault;
public plugin_init()
{
register_plugin("Private MSG", "1.0", "RegonizE");
register_clcmd( "say", "CmdSay" );
register_clcmd("say /spy", "CmdSpy");
register_clcmd("say /block", "CmdBlock");
register_clcmd("say /nopm", "CmdNoPM");
}
public plugin_cfg()
{
SpyVault = nvault_open("PrivateMessageSpy");
}
public plugin_end()
{
nvault_close(SpyVault);
}
public CmdNoPM(id)
{
NoPM[id] = true;
}
public CmdBlock(id)
{
new Message[100];
read_args(Message, charsmax(Message));
new Target = cmd_target(id, Message); // I am immune, obey me!
Blocked[id][Target] = true;
}
public CmdSpy(id)
{
if(get_user_flags(id) & ADMIN_KICK)
{
Spy[id] = !Spy[id];
ColorChat(id, "^4You are no%s spying Private Messages.", Spy[id] ? "w" : " longer");
SaveSpy(id);
return 1;
}
return 0;
}
public client_putinserver(id)
{
if(get_user_flags(id) & ADMIN_KICK)
LoadSpy(id);
NoPM[id] = false;
}
public client_disconnect(id)
{
if(get_user_flags(id) & ADMIN_KICK)
SaveSpy(id);
for(new i;i < get_maxplayers();i++)
{
Blocked[id][i] = false;
}
}
public CmdSay( iPlayer )
{
new szMessage[128], szCommand[32], szName[32], szPrivateMessage[64], RepFormat[100];
read_argv( 1, szMessage, sizeof( szMessage ) -1 );
parse( szMessage, szCommand, charsmax( szCommand ), szName, charsmax( szName ), szPrivateMessage, charsmax( szPrivateMessage ) );
if( equali( "/pm", szCommand ) )
{
new iTarget = cmd_target( iPlayer, szName, 0 );
if(iTarget)
{
if(!NoPM[iTarget])
{
if(!Blocked[iTarget][iPlayer])
{
if(iTarget != iPlayer)
{
new Name[17]; // Meh, ain't messing with a damn spy issue.
get_user_name(iPlayer, Name, 16);
formatex(RepFormat, charsmax(RepFormat), "/pm %s ", szName); // This one is to keep only the message.
replace(szMessage, sizeof( szMessage ), RepFormat, "");
ColorChat(iPlayer, "^1PM To^3 %s:^4 %s", szName, szMessage[containi(szMessage, szPrivateMessage)]);
ColorChat(iTarget, "^1PM From^3 %s:^4 %s", Name, szMessage[containi(szMessage, szPrivateMessage)]);
new players[32], num;
get_players(players, num);
for(new id;id < num;id++)
{
new i = players[id];
if(!Spy[i] || i == iPlayer || i == iTarget)
continue;
formatex(szName, 15, szName);
formatex(Name, 15, Name);
ColorChat(i, "[PM Spy]^4 Sender:^3 %s,^4 Receiver^3 %s:^4 %s", Name, szName, szMessage[containi(szMessage, szPrivateMessage)]);
}
}
else
{
ColorChat(iPlayer, "^4You can't send a message to yourself.");
}
}
else
{
ColorChat(iPlayer, "^4This user has blocked you!");
}
}
else
{
ColorChat(iPlayer, "^4This user has blocked PMs");
}
}
else
{
ColorChat(iPlayer, "^4Syntax:^3 /pm <name> <message>");
}
return 1;
}
return 0;
}
public SaveSpy(id)
{
new Key[64], Data[256];
formatex(Key, charsmax(Key), "%s-ID", GetUserSteamid(id));
formatex(Data, charsmax(Data), "%i#^n", Spy[id] ? 1 : 0);
nvault_set(SpyVault, Key, Data);
}
public LoadSpy(id)
{
new Key[64], Data[256];
formatex(Key, charsmax(Key), "%s-ID", GetUserSteamid(id));
formatex(Data, charsmax(Data), "%i#", Spy[id] ? 1 : 0);
nvault_get(SpyVault, Key, Data, charsmax(Data));
replace_all(Data, charsmax(Data), "#", " ");
Spy[id] = str_to_num(Data) == 1 ? true : false;
}
stock GetUserSteamid(index)
{
new Authid[35];
get_user_authid(index, Authid, charsmax(Authid));
return Authid;
}
stock ColorChat(const id, const string[], {Float, Sql, Resul,_}:...) {
new msg[191], players[32], count = 1;
static len; len = formatex(msg, charsmax(msg), "");
vformat(msg[len], charsmax(msg) - len, string, 3);
if(id) players[0] = id;
else get_players(players,count,"ch");
for (new i = 0; i < count; i++)
{
if(is_user_connected(players[i]))
{
message_begin(MSG_ONE_UNRELIABLE, get_user_msgid("SayText"),_, players[i]);
write_byte(players[i]);
write_string(msg);
message_end();
}
}
}