SAMP Gitlab CI Test
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 

166 lines
4.8 KiB

//
//
// 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);
}
}
}
}
}
//---------------------------------------------