// // // SA-MP Roleplay style chat module for SA-MP 0.3 // (c) 2012 SA-MP Team // All rights reserved // #define GENERAL_COLOR 0xEEEEEEFF #define LOCAL_TALK_COLOR 0xD0D0D0FF #define SPEECH_BUBBLE_COLOR 0xEEEEEEFF #define ACTION_COLOR 0xC2A2DAAA #define CMD_USAGE_COLOR 0xBFC0C2FF #define MEGAPHONE_COLOR 0xFFFF00AA #define WHISPER_COLOR 0xFFFF00AA #define OOC_COLOR 0xE0FFFFAA #define ADMIN_ACTION_COLOR 0xDAA2ACAA #define TALK_DISTANCE 30.0 #define SHOUT_DISTANCE 60.0 #define LOW_DISTANCE 5.0 #define ACTION_DISTANCE 30.0 #define MEGAPHONE_DISTANCE 70.0 #define CHAT_BUBBLE_TIME 6000 #define ACTION_ME 1 #define ACTION_DO 2 //--------------------------------------------- // Send a chat message to this player stock PlayerMessage(playerid, color, message[]) { SendClientMessage(playerid, color, message); } //--------------------------------------------- // Send a chat message to all players stock GlobalMessage(color, message[]) { SendClientMessageToAll(color, message); } //--------------------------------------------- stock CmdUsageMessage(playerid, message[]) { new msg[256+1]; format(msg,256,"[{BFC0C2}usage{EEEEEE}] %s", message); SendClientMessage(playerid, GENERAL_COLOR, msg); } //--------------------------------------------- stock CmdErrorMessage(playerid, message[]) { new msg[256+1]; format(msg,256,"[{E0C0C0}error{EEEEEE}] %s", message); SendClientMessage(playerid, GENERAL_COLOR, msg); } //--------------------------------------------- stock CmdAdminMessage(playerid, message[]) { new msg[256+1]; format(msg,256,"[{5050EE}admin{EEEEEE}] %s", message); SendClientMessage(playerid, GENERAL_COLOR, msg); } //--------------------------------------------- stock AdminActionMessage(playerid, message[]) { PlayerPlaySound(playerid, 1052, 0.0, 0.0, 0.0); SendClientMessage(playerid, ADMIN_ACTION_COLOR, message); } //--------------------------------------------- // Send a chat message to players in distance of playerid // This includes the origin player. stock LocalMessage(Float:dist, playerid, color, message[], chatbubble=0) { if(!strlen(message)) return; if(IsPlayerConnected(playerid)) { new Float:fPlayerX, Float:fPlayerY, Float:fPlayerZ; new Float:fPlayerToPlayerDist; // send to the origin player PlayerMessage(playerid, color, message); // if it requires a chat bubble, show it. if(chatbubble) { SetPlayerChatBubble(playerid, message, color, dist, CHAT_BUBBLE_TIME); } GetPlayerPos(playerid, fPlayerX, fPlayerY, fPlayerZ); for(new i = 0; i < MAX_PLAYERS; i++) { // for every player if(IsPlayerConnected(i) && (i != playerid) && IsPlayerStreamedIn(playerid,i)) { fPlayerToPlayerDist = GetPlayerDistanceFromPoint(i, fPlayerX, fPlayerY, fPlayerZ); if(fPlayerToPlayerDist < dist) { // receiving player is within the specified distance PlayerMessage(i, color, message); } } } } } //--------------------------------------------- // This will send a local talk message and automatically grey-fade it. // This includes the origin player. stock TalkMessage(Float:dist, playerid, prefix[], message[]) { new PlayerName[MAX_PLAYER_NAME+1]; new Msg[256+1]; new MsgWithName[256+1]; if(!strlen(message)) return; if(IsPlayerConnected(playerid)) { new Float:fPlayerX, Float:fPlayerY, Float:fPlayerZ; new Float:fPlayerToPlayerDist; new Float:fNormDistance; new ColorScale; new ColorValue; GetPlayerName(playerid, PlayerName, sizeof(PlayerName)); if(strlen(prefix)) { format(Msg, sizeof(Msg), "%s %s", prefix, message); } else { format(Msg, sizeof(Msg), "%s", message); } format(MsgWithName, sizeof(MsgWithName), "%s: %s", PlayerName, Msg); SetPlayerChatBubble(playerid, Msg, SPEECH_BUBBLE_COLOR, dist, CHAT_BUBBLE_TIME); // Send to originating player PlayerMessage(playerid, LOCAL_TALK_COLOR, MsgWithName); GetPlayerPos(playerid, fPlayerX, fPlayerY, fPlayerZ); for(new i = 0; i < MAX_PLAYERS; i++) { // for every player if(IsPlayerConnected(i) && (i != playerid) && IsPlayerStreamedIn(playerid,i)) { fPlayerToPlayerDist = GetPlayerDistanceFromPoint(i, fPlayerX, fPlayerY, fPlayerZ); if(fPlayerToPlayerDist < dist) { // receiving player is within the specified distance // get normalized distance to create a fade. fNormDistance = 1.0 - (fPlayerToPlayerDist / dist); if(fNormDistance > 0.75) ColorScale = 220; else ColorScale = floatround(96.0 + (128.0 * fNormDistance)); ColorValue = 0x000000FF | ColorScale << 24 | ColorScale << 16 | ColorScale << 8; PlayerMessage(i, ColorValue, MsgWithName); } } } } } //---------------------------------------------