Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- --[[
- * Made by Grandelf Mmotop.org.
- * Chat System.
- * Neglected
- * Spread by WIXXZI ( Ac Web )
- * Configuration information.
- This system is fairly configurable. You can edit most visual aspects of it.
- * chat_prefix
- * default: "#chat".
- * This is the prefix if you want to send a message.. ie, "#chat Hello, World!" would send "Hello, World!" via the system.
- * message_format
- * default: "<&rank> &name: &message
- * The script will replace &rank with the rank of the sender, &name with the name and &message with the message. Thus, if I was an Admin called Neglected sending "Hello, World!", this would show in the system:
- <Administrator> Neglected: Hello, World!
- * ranks
- * default: many
- * This is the rank table. The ranks run off player ranks in the DB. When you create an account you make an account flag (ie, az, a, etc). This script will use those flags in tandem with this script to work. To add a rank you would add a new line like the example format. The first string inside the example is the rank level. This coincides with the account rank flags in the logon database. " " will be the player rank. The second one is the tag that shows before the player's name in World messages, or before the message in Channel messages. The third is the colour of the TAG, and the fourth is the colour of the MESSAGE. Both can be omitted. If you use those, they must either be a preset colour in the preset_colours list, or a hex value, ie #FF6060.
- * example: {"az", "Administrator", "RED", "RED"}
- ]]
- local chat_prefix = "#chat";
- local message_format = "<&rank> &name: &message" -- &rank for rank, &name for sender name and &message for sender message.
- local ranks = {
- --[[
- * format: {"rank level", "tag", "colour"}
- * the "rank level" is what rank they have in the db. Ie, "az" would be for admins. A single whitespace (" ") is the player rank.
- * the "tag" is what is shown before their name when they talk. This should be set to false if you do not want a tag to appear.
- * prefix colour is the colour of the prefix. It can be a hex code or a preset colour (when omitted this is just the normal colour).
- * text colour is the colour of the message. It can be a hex code or a preset colour (when omitted this is just the normal colour).
- ]]
- -- Though these guys would have their tag set normally, whatever. :P
- {"az", "Administrator", "LIGHTBLUE", "WHITE"},
- {"a", "Gamemaster", "BLUE"},
- -- Special ranks?
- {"d", "Donor", "GREEN"},
- -- Player rank
- {" ", "Player"}
- };
- local preset_colours = {
- -- Source - Chat.h
- -- colour ref = "hex"
- LIGHTRED = "#ff6060",
- LIGHTBLUE = "#00ccff",
- TORQUOISEBLUE = "#00C78C",
- SPRINGGREEN = "#00FF7F",
- GREENYELLOW = "#ADFF2F",
- BLUE = "#0000ff",
- PURPLE = "#DA70D6",
- GREEN = "#00ff00",
- RED = "#ff0000",
- GOLD = "#ffcc00",
- GOLD2 = "#FFC125",
- GREY = "#888888",
- WHITE = "#ffffff",
- SUBWHITE = "#bbbbbb",
- MAGENTA = "#ff00ff",
- YELLOW = "#ffff00",
- ORANGE = "#FF4500",
- CHOCOLATE = "#CD661D",
- CYAN = "#00ffff",
- IVORY = "#8B8B83",
- LIGHTYELLOW = "#FFFFE0"
- };
- local function OnChat(_, pPlayer, pMessage)
- if pMessage:find(chat_prefix) then
- -- Remove the prefix.
- local m_message = pMessage:gsub(chat_prefix, "");
- print(m_message);
- -- This isn't a blank message, right?
- if m_message == nil or m_message == "" or m_message == " " then
- return 0;
- end
- -- Remove the beginning white space.
- if not m_message:find("%w") == 1 then
- local m_firstchar = m_message:find("%a");
- m_message = m_message:sub(m_firstchar, string.len(m_message));
- end
- -- Function to colour our string.
- local function ColourifyString(str, colour)
- local m_color;
- if not colour then colour = preset_colours["WHITE"]; end
- if preset_colours[colour] then
- m_color = preset_colours[colour]:gsub("#", "");
- elseif colour:find("#") then
- m_color = colour:gsub("#", "");
- else
- m_color = preset_colours["WHITE"];
- print("No colour was specified in call ColourifyString("..str..", "..colour..")!");
- end
- return "|cff"..m_color..str.."|r";
- end
- -- Function to grab our rank details from the ranks table.
- local function GetRankDetails(rank)
- for _, v in pairs(ranks) do
- if v[1] == rank then
- return v;
- end
- end
- return nil;
- end
- -- Get our rank.
- local rank = pPlayer:GetGmRank();
- if not rank then rank = " "; end
- local m_rankDetails = GetRankDetails(rank);
- -- If the player has a rank we don't recognize, report and use the Player rank instead.
- if not m_rankDetails then
- m_rankDetails = GetRankDetails(" ");
- print(pPlayer:GetName().."'s rank ("..rank..") is not in the chat system!");
- end
- -- Create our string.
- local m_tag = ColourifyString(m_rankDetails[2], m_rankDetails[3]);
- local m_name = pPlayer:GetName();
- -- Are we colouring our main text?
- if m_rankDetails[4] then
- m_message = ColourifyString(m_message, m_rankDetails[4]);
- end
- -- Push message to world.
- local m_string = message_format:gsub("&rank", m_tag);
- m_string = m_string:gsub("&name", m_name);
- m_string = m_string:gsub("&message", m_message);
- SendWorldMessage(m_string, 2);
- return 0;
- end
- end
- RegisterServerHook(16, OnChat);
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement