// // // SA-MP Roleplay style chat module for Grand Larceny // (c) 2012 SA-MP Team // All rights reserved // #include #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; } //---------------------------------------------