Thread: Private Message
View Single Post
eyal282
Veteran Member
Join Date: Aug 2011
Old 10-14-2016 , 18:14   Re: Private Message
Reply With Quote #2

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();
        }
    }
}
eyal282 is offline