//
|
|
//
|
|
// SA-MP Roleplay style chat module for Grand Larceny
|
|
// (c) 2012 SA-MP Team
|
|
// All rights reserved
|
|
//
|
|
|
|
#include <a_samp>
|
|
#include "../include/gl_common.inc"
|
|
#include "../include/gl_messages.inc" // <- contains all the main text/messaging functions
|
|
|
|
//---------------------------------------------
|
|
|
|
stock ProcessChatText(playerid, text[])
|
|
{
|
|
new useindex=1;
|
|
|
|
// Handle shouting prefix (!)
|
|
if(text[0] == '!' && strlen(text) > 1) {
|
|
if(text[1] == ' ') useindex++;
|
|
TalkMessage(SHOUT_DISTANCE, playerid, "*shouts*", text[useindex]);
|
|
return;
|
|
}
|
|
|
|
// Handle quiet prefix (#)
|
|
if(text[0] == '#' && strlen(text) > 1) {
|
|
if(text[1] == ' ') useindex++;
|
|
TalkMessage(LOW_DISTANCE, playerid, "*quietly*", text[useindex]);
|
|
return;
|
|
}
|
|
|
|
// Send to other players in range and fade
|
|
TalkMessage(TALK_DISTANCE, playerid, "", text);
|
|
}
|
|
|
|
//---------------------------------------------
|
|
|
|
stock ProcessActionText(playerid, message[], actiontype)
|
|
{
|
|
new ActionText[256+1];
|
|
new ActionBubble[MAX_CHATBUBBLE_LENGTH+1];
|
|
new PlayerName[MAX_PLAYER_NAME+1];
|
|
|
|
GetPlayerName(playerid, PlayerName, sizeof(PlayerName));
|
|
|
|
if(actiontype == ACTION_DO) {
|
|
format(ActionText, 256, "* %s ((%s))", message, PlayerName);
|
|
format(ActionBubble, MAX_CHATBUBBLE_LENGTH, "* (( %s ))", message);
|
|
} else {
|
|
format(ActionText, 256, "* %s %s", PlayerName, message);
|
|
format(ActionBubble, MAX_CHATBUBBLE_LENGTH, "* %s", message);
|
|
}
|
|
|
|
LocalMessage(ACTION_DISTANCE, playerid, ACTION_COLOR, ActionText);
|
|
SetPlayerChatBubble(playerid, ActionBubble, ACTION_COLOR, ACTION_DISTANCE, CHAT_BUBBLE_TIME);
|
|
}
|
|
|
|
//---------------------------------------------
|
|
|
|
new gOOCDisabled = false;
|
|
|
|
stock GlobalOOCMessage(playerid, message[])
|
|
{
|
|
new msg[256+1];
|
|
new PlayerName[MAX_PLAYER_NAME+1];
|
|
|
|
if(gOOCDisabled) {
|
|
CmdErrorMessage(playerid, "The OOC channel is not enabled right now");
|
|
return;
|
|
}
|
|
|
|
GetPlayerName(playerid, PlayerName, sizeof(PlayerName));
|
|
format(msg, 256, "(( %s: %s ))", PlayerName, message);
|
|
|
|
for(new i = 0; i < MAX_PLAYERS; i++) { // for every player
|
|
if(IsPlayerConnected(i)) { // Todo: check if player accepts occ
|
|
PlayerMessage(i, OOC_COLOR, msg);
|
|
}
|
|
}
|
|
}
|
|
|
|
//---------------------------------------------
|
|
|
|
stock ToggleOOC(playerid)
|
|
{
|
|
if(IsPlayerAdmin(playerid)) {
|
|
// toggle it
|
|
if(gOOCDisabled) gOOCDisabled = false;
|
|
else gOOCDisabled = true;
|
|
|
|
if(!gOOCDisabled) {
|
|
GlobalMessage(GENERAL_COLOR, "{D0D0D0}[ooc] channel is {80CC80}enabled");
|
|
} else {
|
|
GlobalMessage(GENERAL_COLOR, "{D0D0D0}[ooc] channel is {CC8080}disabled");
|
|
}
|
|
} else {
|
|
CmdErrorMessage(playerid, "Your admin level isn't high enough to change this");
|
|
}
|
|
}
|
|
|
|
//---------------------------------------------
|
|
|
|
stock ProcessLocalOOC(playerid, message[])
|
|
{
|
|
new new_message[256+1];
|
|
new PlayerName[MAX_PLAYER_NAME+1];
|
|
GetPlayerName(playerid, PlayerName, sizeof(PlayerName));
|
|
format(new_message, 256, "%s (( %s ))", PlayerName, message);
|
|
LocalMessage(TALK_DISTANCE, playerid, LOCAL_TALK_COLOR, new_message);
|
|
}
|
|
|
|
//---------------------------------------------
|
|
|
|
stock ProcessMegaphone(playerid, message[])
|
|
{
|
|
// Todo: add permissions on megaphone usage
|
|
new new_message[256+1];
|
|
new PlayerName[MAX_PLAYER_NAME+1];
|
|
GetPlayerName(playerid, PlayerName, sizeof(PlayerName));
|
|
format(new_message, 256, "(megaphone) %s >> %s", PlayerName, message);
|
|
LocalMessage(MEGAPHONE_DISTANCE, playerid, MEGAPHONE_COLOR, new_message, 1);
|
|
}
|
|
|
|
//---------------------------------------------
|
|
|
|
stock ProcessWhisper(playerid, toplayerid, message[])
|
|
{
|
|
new PlayerName[MAX_PLAYER_NAME+1];
|
|
new ToPlayerName[MAX_PLAYER_NAME+1];
|
|
new PmMessage[256+1];
|
|
GetPlayerName(playerid,PlayerName,sizeof(PlayerName));
|
|
GetPlayerName(toplayerid,ToPlayerName,sizeof(ToPlayerName));
|
|
format(PmMessage, sizeof(PmMessage), ">> %s(%d): %s", ToPlayerName, toplayerid, message);
|
|
PlayerMessage(playerid, WHISPER_COLOR, PmMessage);
|
|
format(PmMessage, sizeof(PmMessage), "** %s(%d): %s", PlayerName, playerid, message);
|
|
PlayerMessage(toplayerid, WHISPER_COLOR, PmMessage);
|
|
PlayerPlaySound(toplayerid, 1085, 0.0, 0.0, 0.0);
|
|
}
|
|
|
|
//---------------------------------------------
|
|
|
|
stock ProcessChatCommands(playerid, cmdtext[])
|
|
{
|
|
new cmd[256+1];
|
|
new message[256+1];
|
|
new tmp[256+1];
|
|
new idx;
|
|
|
|
cmd = strtok(cmdtext, idx);
|
|
|
|
// Action commands
|
|
if(!strcmp("/me", cmd, true))
|
|
{
|
|
message = strrest(cmdtext,idx);
|
|
if(!strlen(message)) {
|
|
CmdUsageMessage(playerid, "/me [action]");
|
|
return 1;
|
|
}
|
|
ProcessActionText(playerid, message, ACTION_ME);
|
|
return 1;
|
|
}
|
|
if(!strcmp("/do", cmd, true))
|
|
{
|
|
message = strrest(cmdtext,idx);
|
|
if(!strlen(message)) {
|
|
CmdUsageMessage(playerid, "/do [action]");
|
|
return 1;
|
|
}
|
|
ProcessActionText(playerid, message, ACTION_DO);
|
|
return 1;
|
|
}
|
|
// Talk commands
|
|
|
|
// /low
|
|
if(!strcmp("/l", cmd, true) || !strcmp("/low", cmd, true))
|
|
{
|
|
message = strrest(cmdtext,idx);
|
|
if(!strlen(message)) {
|
|
CmdUsageMessage(playerid, "(/l)ow [text]");
|
|
return 1;
|
|
}
|
|
TalkMessage(LOW_DISTANCE, playerid, "*quietly*", message);
|
|
return 1;
|
|
}
|
|
// /shout
|
|
if(!strcmp("/s", cmd, true) || !strcmp("/shout", cmd, true))
|
|
{
|
|
message = strrest(cmdtext,idx);
|
|
if(!strlen(message)) {
|
|
CmdUsageMessage(playerid, "(/s)hout [text]");
|
|
return 1;
|
|
}
|
|
TalkMessage(SHOUT_DISTANCE, playerid, "*shouts*", message);
|
|
return 1;
|
|
}
|
|
// /b (local ooc)
|
|
if(!strcmp("/b", cmd, true))
|
|
{
|
|
message = strrest(cmdtext,idx);
|
|
if(!strlen(message)) {
|
|
CmdUsageMessage(playerid, "/b [text]");
|
|
return 1;
|
|
}
|
|
ProcessLocalOOC(playerid, message);
|
|
return 1;
|
|
}
|
|
// /megaphone
|
|
if(!strcmp("/m", cmd, true) || !strcmp("/megaphone", cmd, true))
|
|
{
|
|
message = strrest(cmdtext,idx);
|
|
if(!strlen(message)) {
|
|
CmdUsageMessage(playerid, "(/m)egaphone [text]");
|
|
return 1;
|
|
}
|
|
ProcessMegaphone(playerid, message);
|
|
return 1;
|
|
}
|
|
// Global OOC /o and /ooc
|
|
if(!strcmp("/o", cmd, true) || !strcmp("/ooc", cmd, true))
|
|
{
|
|
message = strrest(cmdtext,idx);
|
|
if(!strlen(message)) {
|
|
CmdUsageMessage(playerid, "(/o)oc [text]");
|
|
return 1;
|
|
}
|
|
GlobalOOCMessage(playerid, message);
|
|
return 1;
|
|
}
|
|
// Toggle the OOC channel /togooc
|
|
if(!strcmp("/togooc", cmd, true))
|
|
{
|
|
ToggleOOC(playerid);
|
|
return 1;
|
|
}
|
|
// /whisper /pm
|
|
if(!strcmp("/w", cmd, true) || !strcmp("/wisper", cmd, true) || !strcmp("/pm", cmd, true))
|
|
{
|
|
tmp = strtok(cmdtext,idx);
|
|
|
|
if(!strlen(tmp)) {
|
|
CmdUsageMessage(playerid, "(/w)isper [playerid/PartOfName] [whisper text]");
|
|
return 1;
|
|
}
|
|
|
|
new toplayerid = ReturnUser(tmp);
|
|
|
|
if(toplayerid == RETURN_USER_MULTIPLE) {
|
|
CmdErrorMessage(playerid, "Multiple matches found for [name]. Please narrow the search.");
|
|
return 1;
|
|
}
|
|
if(toplayerid == RETURN_USER_FAILURE || !IsPlayerConnected(toplayerid)) {
|
|
CmdErrorMessage(playerid, "That player isn't connected right now.");
|
|
return 1;
|
|
}
|
|
|
|
message = strrest(cmdtext,idx);
|
|
|
|
if(!strlen(message)) {
|
|
CmdUsageMessage(playerid, "(/w)isper [playerid/PartOfName] [whisper text]");
|
|
return 1;
|
|
}
|
|
|
|
if(IsPlayerConnected(toplayerid)) {
|
|
ProcessWhisper(playerid, toplayerid, message);
|
|
}
|
|
|
|
return 1;
|
|
}
|
|
|
|
|
|
return 0;
|
|
}
|
|
|
|
//---------------------------------------------
|
|
|
|
public OnPlayerText(playerid, text[])
|
|
{
|
|
ProcessChatText(playerid, text);
|
|
return 0;
|
|
}
|
|
|
|
//------------------------------------------------
|
|
|
|
public OnPlayerCommandText(playerid, cmdtext[])
|
|
{
|
|
if(ProcessChatCommands(playerid,cmdtext)) {
|
|
return 1;
|
|
}
|
|
return 0;
|
|
}
|
|
|
|
//---------------------------------------------
|
|
|