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.
 
 
 

293 lines
7.4 KiB

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