Raised This Month: $ Target: $400
 0% 

[Help] Scripting Admin chat


Post New Thread Reply   
 
Thread Tools Display Modes
Author Message
natkemon
Member
Join Date: Dec 2008
Old 03-20-2009 , 02:35   [Help] Scripting Admin chat
Reply With Quote #1

Hi I have used this from std_admin_color_chat.sma.

where it says this:
PHP Code:
#define SAY_PREFIX     "^x04"    // Text before the username in the say command
#define SAY_SUFFIX     ": ^x01" // Text after the username in the say command 
well how can i make it work so that i press "y" and i get to type in a message

OR

I did "bind p amx_say" ..... so when i press P it doesn't let me type anything its just blank. so is there anyway i can actually type of message?

So anyway you can help thanks
p.s i hope i didnt' make it too confusing for u :S

PHP Code:
//***************************************************************
//* Standard Admin Color Chat v. 1.1.1 for AMXX     *
//* by Martin J. Van der Cal        *
//*            *
//* Standard admin chat in color       *
//*            *
//* Copyright (C) 2005, Martin J. Van der Cal     *
//* This plugin is under the GNU General Public License, read  *
//* "Std Admin Color Chat Readme.doc" for further information.  *
//*            *
//* std_admin_color_chat.sma       *
//*            *
//***************************************************************
#include <amxmodx>
#define MAX_MESSAGE_SIZE   256
#define MAX_COMMAND_SIZE   10
#define AMX_CHAT_CHAR_RECOGNITION '@'  // What character we look for when we decide if the message should go to the admins
#define AMX_PSAY_CHAR_RECOGNITION '#'  // Character to look for when sending PMs
// Error Codes
#define TOO_MANY_MATCHED   -1
#define NONE_MATCHED    -2
#define AMX_PSAY_FINDNICK_ERROR_TOO_MANY "^x04[ACC] says: Error <Too many found>"
#define AMX_PSAY_FINDNICK_ERROR_NONE  "^x04[ACC] says: Error <None found>"
#define AMX_PSAY_FINDNICK_ERROR_UNKNOWN  "^x04[ACC] says: Error <Unknown error>"
// Text defines, PREFIX is text before and SUFFIX is text after the username in a message.
// Feel free to change these. Also note that ^x01 and ^x04 is color codes.
#define AMX_CHAT_PREFIX     "^x04"    // Text before the username in amx_chat command
#define AMX_CHAT_SUFFIX     " tells admins: " // Text after the username in amx_chat command
#define AMX_PSAY_SEND_PREFIX   "^x04"    // Text before the username in a PM that you send
#define AMX_PSAY_SEND_SUFFIX   " PMs you: ^x01" // Text after the username in a PM that you send
#define AMX_PSAY_BACK_TO_SENDER_PREFIX "^x04You PM "  // Text before the username in the confimation notice of the PM you send
#define AMX_PSAY_BACK_TO_SENDER_SUFFIX ": ^x01"   // Text after the username in the confimation notice of the PM you send
#define AMX_SAY_PREFIX     "^x04"    // Text before the username in the amx_say command
#define AMX_SAY_SUFFIX     ": ^x01" // Text after the username in the amx_say command
#define SAY_PREFIX     "^x04"    // Text before the username in the amx_say command
#define SAY_SUFFIX     ": ^x01" // Text after the username in the amx_say command
// E. g. an amx_chat message with the current settings will be as following example shows
// Command by player with the nick "Martin Van der Cal":
// amx_chat Hello admins
// Shows as:
// Martin Van der Cal tells admins: Hello admins
// Also note that with only the color code in the prefix the whole line will show as green to all admins

new gmsgSayText
public plugin_init()
{
 
register_plugin("Std Admin Color Chat""1.1.1""Van der Cal")
 
register_clcmd("say",  "SayHandler",  ADMIN_CHAT"# <name or #userid> <message> - Sends a PM")
 
register_clcmd("say_team""SayTeamHandler"0,   "@ <message> - Displays message to admins")
 
 
register_concmd("amx_say""ConCmdACCSay",  ADMIN_CHAT"<message> - Displays message to all players")
 
register_concmd("amx_psay""ConCmdACCPM",  ADMIN_CHAT"# <name or #userid> <message> - Sends a PM");
 
register_concmd("amx_chat""ConCmdACCAdmins"ADMIN_CHAT"<message> - Displays message to admins");
 
gmsgSayText get_user_msgid("SayText")
}
// Runs if anything is said in say
public SayHandler(iPlayerID)
{
 new 
sTemp[MAX_MESSAGE_SIZE]
 new 
sMessage[MAX_MESSAGE_SIZE]
 new 
sCmd[MAX_COMMAND_SIZE]
 
read_argv(1sTempMAX_MESSAGE_SIZE 1)
 
 
// if the player has admin chat rights
 
if ( get_user_flags(iPlayerID) & ADMIN_CHAT )
 {
  
// if the chat starts with AMX_PSAY_CHAR_RECOGNITION. That is, if an admin wants to send a PM
  
if ( sTemp[0] == AMX_PSAY_CHAR_RECOGNITION )
  {
//   server_print("[DEBUG] ")
   
if (sTemp[1] == ' ')
   {
    
// Remove the chat recognition chars
    
strbreak(sTempsCmdMAX_COMMAND_SIZE-1sMessageMAX_MESSAGE_SIZE-1)
   }
   else
   {
    
// Remove the chat recognition chars without the space
    
sTemp[0] = ' '
    
trim(sTemp)
    
copy(sMessageMAX_MESSAGE_SIZE-1sTemp)
   }
   
   
// Now we have our nick and message only in sMessage and thus, time for the next stage
   
BaseSendPM(sMessageiPlayerID)
   
   return 
PLUGIN_HANDLED
  
}
 }
 return 
PLUGIN_CONTINUE
}
// Runs if anything is said in team_say
public SayTeamHandler(iPlayerID)
{
 new 
sTemp[MAX_MESSAGE_SIZE]
 new 
sCmd[MAX_COMMAND_SIZE]
 new 
sMessage[MAX_MESSAGE_SIZE]
 
read_argv(1sTempMAX_MESSAGE_SIZE 1)
 
 
// if the chat starts with AMX_CHAT_CHAR_RECOGNITION then we are supposed to send it to all admins
 
if ( sTemp[0] == AMX_CHAT_CHAR_RECOGNITION )
 {
  
// Somehow I cant get trim to work as I want, so if there are a space after @, then I had to resort to using strbreak
  
if (sTemp[1] == ' ')
  {
   
// Remove the chat recognition chars, sMessage will contain the message and the message only
   
strbreak(sTempsCmdMAX_COMMAND_SIZE-1sMessageMAX_MESSAGE_SIZE-1)
  }
  else
  {
   
// Remove the chat recognition chars without the space.
   
sTemp[0] = ' '
   
trim(sTemp)
   
copy(sMessageMAX_MESSAGE_SIZE-1sTemp)
  }
  
  
remove_quotes(sMessage)
  
  
SendAdminMessage(sMessageiPlayerID)
  
  return 
PLUGIN_HANDLED
 
}
 else if ( 
get_user_flags(iPlayerID) & ADMIN_CHAT )
 {
  
// if the chat starts with AMX_PSAY_CHAR_RECOGNITION. That is, if an admin wants to send a PM
  
if ( sTemp[0] == AMX_PSAY_CHAR_RECOGNITION )
  {
   if (
sTemp[1] == ' ')
   {
    
// Remove the chat recognition chars
    
strbreak(sTempsCmdMAX_COMMAND_SIZE-1sMessageMAX_MESSAGE_SIZE-1)
   }
   else
   {
    
// Remove the chat recognition chars without the space
    
sTemp[0] = ' '
    
trim(sTemp)
    
copy(sMessageMAX_MESSAGE_SIZE-1sTemp)
   }
   
   
BaseSendPM(sMessageiPlayerID)
   return 
PLUGIN_HANDLED
  
}
 }
 return 
PLUGIN_CONTINUE
}
// Console command, amx_say <message>
public ConCmdACCSay(iPlayerID)
{
 
// if the user is an admin with ADMIN_CHAT flag
 
if ( get_user_flags(iPlayerID) & ADMIN_CHAT )
 {
  new 
sMessage[MAX_MESSAGE_SIZE]
  
read_args(sMessageMAX_MESSAGE_SIZE-1)
  
remove_quotes(sMessage)
  
  new 
sUser[MAX_MESSAGE_SIZE]
  
get_user_name(iPlayerIDsUserMAX_MESSAGE_SIZE-1)
  
  
// The message that we will actually send
  
new sRealMessage[MAX_MESSAGE_SIZE] = AMX_SAY_PREFIX
  add
(sRealMessageMAX_MESSAGE_SIZE-1sUser)
  
add(sRealMessageMAX_MESSAGE_SIZE-1AMX_SAY_SUFFIX)
  
add(sRealMessageMAX_MESSAGE_SIZE-1sMessageMAX_MESSAGE_SIZE-strlen(sRealMessage)-1)
  
// Get the steamid for the sake of logging
  
new sSendSteamID[MAX_MESSAGE_SIZE]
  
get_user_authid(iPlayerIDsSendSteamIDMAX_MESSAGE_SIZE-1)
  
  
// Get all current players
  
new nCurPlayers
  
new iArrCurPlayers[32]
  
get_players(iArrCurPlayersnCurPlayers"c")
  
  
// Log the message
  
log_amx("Chat (ALL), From: ^"%s<%d><%s><>^" Message: ^"%s^""sUseriPlayerIDsSendSteamIDsMessage)
  
log_message("^"%s<%d><%s><>^" triggered ^"amx_say^" (text ^"%s^")",sUseriPlayerIDsSendSteamIDsMessage)
 
  
// For every player
  
for (new iID 0iID nCurPlayersiID++)
   
SendMessage(sRealMessageiArrCurPlayers[iID]) // Send the message to the player
 
}
 return 
PLUGIN_HANDLED;
}
// Console command, amx_psay <nick or steamid> <message>
public ConCmdACCPM(iPlayerID)
{
 
// if the user is an admin
 
if ( get_user_flags(iPlayerID) & ADMIN_CHAT )
 {
  new 
sArgs[MAX_MESSAGE_SIZE]
  
read_args(sArgsMAX_MESSAGE_SIZE-1)
  
BaseSendPM(sArgsiPlayerID)
 }
 return 
PLUGIN_HANDLED
}
// Console Command, amx_chat <message>
public ConCmdACCAdmins(iPlayerID)
{
 new 
sArgs[MAX_MESSAGE_SIZE]
 
read_args(sArgsMAX_MESSAGE_SIZE-1)
 
remove_quotes(sArgs)
 
 
SendAdminMessage(sArgsiPlayerID)
 return 
PLUGIN_HANDLED
}
// Returns the id of the player, IF and only IF it found ONLY one player with which contains the nick provided, otherwise it returns less than 0
FindPlayerWithNick(sNick[MAX_MESSAGE_SIZE])
{
 new 
iArrPlayers[32]
 new 
nPlayers
 
new sUser[MAX_MESSAGE_SIZE]
 new 
iPlayerID = -100
 get_players
(iArrPlayersnPlayers"c")
 
 
// for every player
 
for (new iID 0iID nPlayersiID++)
 {
  
get_user_name(iArrPlayers[iID], sUserMAX_MESSAGE_SIZE-1)
  
// Check if their nick contains the nick part provided, ignore caps
  
if ( containi(sUsersNick) >= 0  || equali(sUser,sNick) )
  {
   
// if we havent found anyone yet, else return we have found too many
   
if (iPlayerID == -100)
    
iPlayerID iArrPlayers[iID]
   else
    return 
TOO_MANY_MATCHED
  
}
 }
 if (
iPlayerID == -100)
  return 
NONE_MATCHED
 
else
  return 
iPlayerID
  
 
return 0
}
// Returns the id of the player with the correct steamid if it find any, otherwise it returns less than 0
FindPlayerWithSteamID(sSteamID[MAX_MESSAGE_SIZE])
{
 new 
iArrPlayers[32]
 new 
nPlayers
 
new sUser[MAX_MESSAGE_SIZE]
 new 
iResult
 get_players
(iArrPlayersnPlayers"c")
 for (new 
iID 0iID nPlayersiID++)
 {
  
get_user_authid(iArrPlayers[iID], sUserMAX_MESSAGE_SIZE-1)
  
// The steam id must be strictly equal
  
iResult equal(sUsersSteamID)
  if ( 
iResult == )
  {
   
// Since steamid is unique, we dont have to check anyone else
   
return iArrPlayers[iID]
  }
 }
 return 
NONE_MATCHED
}
// This is where we build the message to be sent, logs the message and find out who the admins are
SendAdminMessage(sMessage[], iSenderID)
{
 
// The message that is going to be sent. ^x04 is green color
 
new sRealMessage[MAX_MESSAGE_SIZE] = AMX_CHAT_PREFIX
 
// Get the username of the sender
 
new sUser[MAX_MESSAGE_SIZE]
 
get_user_name(iSenderIDsUserMAX_MESSAGE_SIZE 1)
 
 
// Add user, "user friendly text" and the message to the message we are going to send
 
add(sRealMessageMAX_MESSAGE_SIZEsUser)
 
add(sRealMessageMAX_MESSAGE_SIZEAMX_CHAT_SUFFIX)
 
addsRealMessageMAX_MESSAGE_SIZE, (sMessage), (MAX_MESSAGE_SIZE-strlen(sRealMessage)-1) )
 
// Get the steamid for the sake of logging
 
new sSendSteamID[MAX_MESSAGE_SIZE]
 
get_user_authid(iSenderIDsSendSteamIDMAX_MESSAGE_SIZE-1)
 
 
// Get all current players
 
new nCurPlayers
 
new iArrCurPlayers[32]
 
get_players(iArrCurPlayersnCurPlayers"c")
 
 
// Log the message
 
log_amx("ADMINS amx_chat, From: ^"%s<%d><%s><>^" Message: ^"%s^""sUseriSenderIDsSendSteamIDsMessage)
 
log_message("^"%s<%d><%s><>^" triggered ^"amx_chat^" (text ^"%s^")",sUseriSenderIDsSendSteamIDsMessage)
 
// For every player
 
for (new iID 0iID nCurPlayersiID++)
  if ( 
get_user_flags(iArrCurPlayers[iID]) & ADMIN_CHAT // If the player is an admin
   
SendMessage(sRealMessageiArrCurPlayers[iID]) // Send the message to the player(admin)
}
// This is where we prepare the PM, breaks out the nick and the message from the original message,
// finds who the reciever is and sends it. Also sends error if none or several matches found
BaseSendPM(sArgs[], iPlayerID)
{
 new 
sNick[MAX_MESSAGE_SIZE]
 new 
sMessage[MAX_MESSAGE_SIZE]
 
 
// Get the nick/steamid
 
strbreak(sArgssNickMAX_MESSAGE_SIZE-1sMessageMAX_MESSAGE_SIZE-1)
 
 
// Remove all those nasty quotes ! ! !
 
remove_quotes(sNick)
 
replace(sMessageMAX_MESSAGE_SIZE-1"^"", "")
 // Get the players id by comparing the players nick with the one the user supplied
 new iResult
 if ( equal(sNick, "
STEAM_", 6) )
  iResult = FindPlayerWithSteamID(sNick)
 else
  iResult = FindPlayerWithNick(sNick)
 if ( iResult >= 0 ) // if we found "
ONE" player with that nick, then we send the PM
 {
  SendPM(sMessage, iPlayerID, iResult)
 }
 else // if we found none or several with that nick. Then we send back an error message to the admin
 {
  new sSendSteamID[MAX_MESSAGE_SIZE]
  get_user_authid(iPlayerID, sSendSteamID, MAX_MESSAGE_SIZE-1)
  
  if ( iResult == TOO_MANY_MATCHED )
   format(sMessage, MAX_MESSAGE_SIZE-1, AMX_PSAY_FINDNICK_ERROR_TOO_MANY)
  else if ( iResult == NONE_MATCHED )
   format(sMessage, MAX_MESSAGE_SIZE-1, AMX_PSAY_FINDNICK_ERROR_NONE)
  else
   format(sMessage, MAX_MESSAGE_SIZE-1, AMX_PSAY_FINDNICK_ERROR_UNKNOWN)
  
  // if the sender is an admin or infact the server itself.
  if ( equal(sSendSteamID, "
STEAM_", 6) )
   SendMessage(sMessage, iPlayerID)
  else
   server_print(sMessage)
 }
}
// Here we build the PM message, logs it and sends it
SendPM(sMessage[], iSenderID, iRecieverID)
{
 new sRealMessage[MAX_MESSAGE_SIZE] = AMX_PSAY_SEND_PREFIX
 // To the person
 new sUser[MAX_MESSAGE_SIZE]
 get_user_name(iSenderID, sUser, MAX_MESSAGE_SIZE - 1)
 
 add(sRealMessage, MAX_MESSAGE_SIZE-1, sUser)
 add(sRealMessage, MAX_MESSAGE_SIZE-1, AMX_PSAY_SEND_SUFFIX)
 add(sRealMessage, MAX_MESSAGE_SIZE-1, sMessage, MAX_MESSAGE_SIZE-strlen(sRealMessage)-1)
 new sRecvSteamID[MAX_MESSAGE_SIZE]
 new sSendSteamID[MAX_MESSAGE_SIZE]
 new sRecvName[MAX_MESSAGE_SIZE]
 
 get_user_authid(iSenderID, sSendSteamID, MAX_MESSAGE_SIZE-1)
 get_user_authid(iRecieverID, sRecvSteamID, MAX_MESSAGE_SIZE-1)
 get_user_name(iRecieverID, sRecvName, MAX_MESSAGE_SIZE - 1)
 
 log_amx("
PM From: ^"%s<%d><%s><>^" To: ^"%s<%d><%s><>^" Message: ^"%s^"", sUser, iSenderID, sSendSteamID, sRecvName, iRecieverID, sRecvSteamID, sMessage)
 log_message("
^"%s<%d><%s><>^" triggered ^"amx_psay^" against ^"%s<%d><%s><>^" (text ^"%s^")",
  sUser, iSenderID, sSendSteamID, sRecvName, iRecieverID, sRecvSteamID, sMessage)
 SendMessage(sRealMessage, iRecieverID)
 
 // And to the admin who sent it
 new sToAdmin[MAX_MESSAGE_SIZE] = AMX_PSAY_BACK_TO_SENDER_PREFIX
 add(sToAdmin, MAX_MESSAGE_SIZE-1, sRecvName)
 add(sToAdmin, MAX_MESSAGE_SIZE-1, AMX_PSAY_BACK_TO_SENDER_SUFFIX)
 add(sToAdmin, MAX_MESSAGE_SIZE-1, sMessage, MAX_MESSAGE_SIZE-strlen(sToAdmin)-1)
 // if the sender is an admin or infact the server
 if ( equal(sSendSteamID, "
STEAM_", 6) )
  SendMessage(sToAdmin, iSenderID)
 else
  server_print(sToAdmin)
}
// General method for sending chat messages, params are the message to be sent and the id of the player who should get it
SendMessage(sMessage[], iRecieverID)
{
 message_begin(MSG_ONE, gmsgSayText, {0,0,0}, iRecieverID)
 write_byte(iRecieverID)
 write_string(sMessage)
 message_end()

natkemon is offline
ConnorMcLeod
Veteran Member
Join Date: Jul 2006
Location: France (95)
Old 03-20-2009 , 02:39   Re: [Help] Scripting Admin chat
Reply With Quote #2

bind "i" "messagemode amx_say"
bind "o" "messagemode amx_chat"
__________________
- tired and retired -

- my plugins -
ConnorMcLeod is offline
natkemon
Member
Join Date: Dec 2008
Old 03-20-2009 , 02:42   Re: [Help] Scripting Admin chat
Reply With Quote #3

lol that seem'd too easy xD

thanks
natkemon is offline
Reply



Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off

Forum Jump


All times are GMT -4. The time now is 09:03.


Powered by vBulletin®
Copyright ©2000 - 2024, vBulletin Solutions, Inc.
Theme made by Freecode