Thallia's Chatterbox.xml
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE MudletPackage> <MudletPackage version="1.0">
<TriggerPackage> <TriggerGroup isActive="yes" isFolder="yes" isTempTrigger="no" isMultiline="no" isPerlSlashGOption="no" isColorizerTrigger="no" isFilterTrigger="no" isSoundTrigger="no" isColorTrigger="no" isColorTriggerFg="no" isColorTriggerBg="no"> <name>Chatterbox</name> <script>-- the following comment is how to send a trigger match to the a window
-- moonlightUI.sendChat ("Order") -- the following comment is how to send it with colors specified: foreground -- is declared first, anything missing is assumed, and "nochange" means don't -- change the colors -- moonlightUI.sendChat ("Order", {255,255,255}) -- moonlightUI.sendChat ("Order", {255,255,255}, {0,0,0}) -- moonlightUI.sendChat ("Order", "nochange", {0,0,0})
-- the following comment is how to replace long text with a shorter version -- (this will replace it in the main window as well as the miniconsole) --[[ selectString("(this is a very long clan name)", 1) setBgColor(getBgColor()) setFgColor(getFgColor()) replace("(shortclanname)") resetFormat () --]]</script>
<triggerType>0</triggerType> <conditonLineDelta>0</conditonLineDelta> <mStayOpen>0</mStayOpen> <mCommand></mCommand> <packageName></packageName> <mFgColor>#ff0000</mFgColor> <mBgColor>#ffff00</mBgColor> <mSoundFile></mSoundFile> <colorTriggerFgColor>#000000</colorTriggerFgColor> <colorTriggerBgColor>#000000</colorTriggerBgColor> <regexCodeList/> <regexCodePropertyList/> <Trigger isActive="yes" isFolder="no" isTempTrigger="no" isMultiline="no" isPerlSlashGOption="no" isColorizerTrigger="no" isFilterTrigger="no" isSoundTrigger="no" isColorTrigger="no" isColorTriggerFg="no" isColorTriggerBg="no"> <name>Public</name> <script>moonlightUI.sendChat ("Public")
moonlightUI.sendChat ("Other")</script>
<triggerType>0</triggerType> <conditonLineDelta>0</conditonLineDelta> <mStayOpen>0</mStayOpen> <mCommand></mCommand> <packageName></packageName> <mFgColor>#ff0000</mFgColor> <mBgColor>#ffff00</mBgColor> <mSoundFile></mSoundFile> <colorTriggerFgColor>#000000</colorTriggerFgColor> <colorTriggerBgColor>#000000</colorTriggerBgColor> <regexCodeList> <string>^\[Public\](.*?)$</string> <string>^\[Newbie\](.*?)$</string> <string>^\[Science\](.*?)$</string> </regexCodeList> <regexCodePropertyList> <integer>1</integer> <integer>1</integer> <integer>1</integer> </regexCodePropertyList> </Trigger> <Trigger isActive="yes" isFolder="no" isTempTrigger="no" isMultiline="no" isPerlSlashGOption="no" isColorizerTrigger="no" isFilterTrigger="no" isSoundTrigger="no" isColorTrigger="no" isColorTriggerFg="no" isColorTriggerBg="no"> <name>OOC</name> <script>moonlightUI.sendChat ("OOC")
moonlightUI.sendChat ("Other")</script>
<triggerType>0</triggerType> <conditonLineDelta>0</conditonLineDelta> <mStayOpen>0</mStayOpen> <mCommand></mCommand> <packageName></packageName> <mFgColor>#ff0000</mFgColor> <mBgColor>#ffff00</mBgColor> <mSoundFile></mSoundFile> <colorTriggerFgColor>#000000</colorTriggerFgColor> <colorTriggerBgColor>#000000</colorTriggerBgColor> <regexCodeList> <string>^<OOC> (.*?)$</string> </regexCodeList> <regexCodePropertyList> <integer>1</integer> </regexCodePropertyList> </Trigger> <Trigger isActive="yes" isFolder="no" isTempTrigger="no" isMultiline="no" isPerlSlashGOption="no" isColorizerTrigger="no" isFilterTrigger="no" isSoundTrigger="no" isColorTrigger="no" isColorTriggerFg="no" isColorTriggerBg="no"> <name>paging</name> <script>moonlightUI.sendChat ("OOC")
moonlightUI.sendChat ("Other")</script>
<triggerType>0</triggerType> <conditonLineDelta>0</conditonLineDelta> <mStayOpen>0</mStayOpen> <mCommand></mCommand> <packageName></packageName> <mFgColor>#ff0000</mFgColor> <mBgColor>#ffff00</mBgColor> <mSoundFile></mSoundFile> <colorTriggerFgColor>#000000</colorTriggerFgColor> <colorTriggerBgColor>#000000</colorTriggerBgColor> <regexCodeList> <string>^You (page|page-pose), (.*?)$</string> <string>^\[Page\] (.*?)$</string> </regexCodeList> <regexCodePropertyList> <integer>1</integer> <integer>1</integer> </regexCodePropertyList> </Trigger> <Trigger isActive="yes" isFolder="no" isTempTrigger="no" isMultiline="no" isPerlSlashGOption="no" isColorizerTrigger="no" isFilterTrigger="no" isSoundTrigger="no" isColorTrigger="no" isColorTriggerFg="no" isColorTriggerBg="no"> <name>Other</name> <script>moonlightUI.sendChat ("Other")</script> <triggerType>0</triggerType> <conditonLineDelta>0</conditonLineDelta> <mStayOpen>0</mStayOpen> <mCommand></mCommand> <packageName></packageName> <mFgColor>#ff0000</mFgColor> <mBgColor>#ffff00</mBgColor> <mSoundFile></mSoundFile> <colorTriggerFgColor>#000000</colorTriggerFgColor> <colorTriggerBgColor>#000000</colorTriggerBgColor> <regexCodeList> <string>^\[(Badges|Rp|Pickup|Bile|Update|Science|TG|Links|Radio|Sports|Writing|SYSTEM)\] (.*?)$</string> </regexCodeList> <regexCodePropertyList> <integer>1</integer> </regexCodePropertyList> </Trigger> <Trigger isActive="yes" isFolder="no" isTempTrigger="no" isMultiline="no" isPerlSlashGOption="no" isColorizerTrigger="no" isFilterTrigger="no" isSoundTrigger="no" isColorTrigger="no" isColorTriggerFg="no" isColorTriggerBg="no"> <name>Tick</name> <script>moonlightUI.sendChat ("Tick")</script> <triggerType>0</triggerType> <conditonLineDelta>0</conditonLineDelta> <mStayOpen>0</mStayOpen> <mCommand></mCommand> <packageName></packageName> <mFgColor>#ff0000</mFgColor> <mBgColor>#ffff00</mBgColor> <mSoundFile></mSoundFile> <colorTriggerFgColor>#000000</colorTriggerFgColor> <colorTriggerBgColor>#000000</colorTriggerBgColor> <regexCodeList> <string>^\[Tick\](.*?)$</string> <string>^\[Market\](.*?)$</string> </regexCodeList> <regexCodePropertyList> <integer>1</integer> <integer>1</integer> </regexCodePropertyList> </Trigger> <Trigger isActive="yes" isFolder="no" isTempTrigger="no" isMultiline="no" isPerlSlashGOption="no" isColorizerTrigger="no" isFilterTrigger="no" isSoundTrigger="no" isColorTrigger="no" isColorTriggerFg="no" isColorTriggerBg="no"> <name>Auction</name> <script>moonlightUI.sendChat ("Auction")
moonlightUI.sendChat ("Other")</script>
<triggerType>0</triggerType> <conditonLineDelta>0</conditonLineDelta> <mStayOpen>0</mStayOpen> <mCommand></mCommand> <packageName></packageName> <mFgColor>#ff0000</mFgColor> <mBgColor>#ffff00</mBgColor> <mSoundFile></mSoundFile> <colorTriggerFgColor>#000000</colorTriggerFgColor> <colorTriggerBgColor>#000000</colorTriggerBgColor> <regexCodeList> <string>^\[Auction\] (.*?)$</string> </regexCodeList> <regexCodePropertyList> <integer>1</integer> </regexCodePropertyList> </Trigger> <Trigger isActive="yes" isFolder="no" isTempTrigger="no" isMultiline="no" isPerlSlashGOption="no" isColorizerTrigger="no" isFilterTrigger="no" isSoundTrigger="no" isColorTrigger="no" isColorTriggerFg="no" isColorTriggerBg="no"> <name>Combats</name> <script>moonlightUI.sendChat ("Combat")</script> <triggerType>0</triggerType> <conditonLineDelta>0</conditonLineDelta> <mStayOpen>0</mStayOpen> <mCommand></mCommand> <packageName></packageName> <mFgColor>#ff0000</mFgColor> <mBgColor>#ffff00</mBgColor> <mSoundFile></mSoundFile> <colorTriggerFgColor>#000000</colorTriggerFgColor> <colorTriggerBgColor>#000000</colorTriggerBgColor> <regexCodeList> <string>^<Daily Mission>(.*?)$</string> <string>^(.*?)XP Gained(.*?)Freecred Gained(.*?)$</string> <string>^<Salvage> Thallia manages to salvage(.*?)$</string> <string>^(\<give\>|\w* gives ).*$</string> </regexCodeList> <regexCodePropertyList> <integer>1</integer> <integer>1</integer> <integer>1</integer> <integer>1</integer> </regexCodePropertyList> </Trigger> <Trigger isActive="yes" isFolder="no" isTempTrigger="no" isMultiline="no" isPerlSlashGOption="no" isColorizerTrigger="no" isFilterTrigger="no" isSoundTrigger="no" isColorTrigger="no" isColorTriggerFg="no" isColorTriggerBg="no"> <name>LFG</name> <script>moonlightUI.sendChat ("LFG")</script> <triggerType>0</triggerType> <conditonLineDelta>0</conditonLineDelta> <mStayOpen>0</mStayOpen> <mCommand></mCommand> <packageName></packageName> <mFgColor>#ff0000</mFgColor> <mBgColor>#ffff00</mBgColor> <mSoundFile></mSoundFile> <colorTriggerFgColor>#000000</colorTriggerFgColor> <colorTriggerBgColor>#000000</colorTriggerBgColor> <regexCodeList> <string>^\[Lfg\](.*?)$</string> </regexCodeList> <regexCodePropertyList> <integer>1</integer> </regexCodePropertyList> </Trigger> <Trigger isActive="yes" isFolder="no" isTempTrigger="no" isMultiline="no" isPerlSlashGOption="no" isColorizerTrigger="no" isFilterTrigger="no" isSoundTrigger="no" isColorTrigger="no" isColorTriggerFg="no" isColorTriggerBg="no"> <name>Faction</name> <script>moonlightUI.sendChat ("Other")</script> <triggerType>0</triggerType> <conditonLineDelta>0</conditonLineDelta> <mStayOpen>0</mStayOpen> <mCommand></mCommand> <packageName></packageName> <mFgColor>#ff0000</mFgColor> <mBgColor>#ffff00</mBgColor> <mSoundFile></mSoundFile> <colorTriggerFgColor>#000000</colorTriggerFgColor> <colorTriggerBgColor>#000000</colorTriggerBgColor> <regexCodeList> <string>^\[(Zephyr|Promethean|RSX Solutions)\] (.*?)$</string> </regexCodeList> <regexCodePropertyList> <integer>1</integer> </regexCodePropertyList> </Trigger> </TriggerGroup> </TriggerPackage>
<ScriptPackage>
<Script isActive="yes" isFolder="no"> <name>Chatterbox</name> <packageName></packageName> <script>--[[
to do: 1) dynamically scale the tabs to the text width --]]
-- I like to set the unused space to a dark red
-- it's Red Green Blue, from 1-255, so change as you prefer!
-- 0,0,0 is black
setBorderColor (25, 0, 0)
-- and let's begin by creating the UI table moonlightUI = moonlightUI or {}
-- we'll set the dimensions so the screen can dynamically scale -- adjust these as you prefer, as well! moonlightUI.dimensions = {} moonlightUI.rightbar = 350 moonlightUI.bottombar = 15 -- oh, and set the font size for the chat windows moonlightUI.fontsize = 8
-- now, we move that pesky main window! setBorderTop (5) setBorderLeft (5) setBorderRight (moonlightUI.rightbar + 10) setBorderBottom (moonlightUI.bottombar + 4)
-- ================
-- Chat Container
-- ================
-- let's make the chat container moonlightUI.chatcontainer = Geyser.Container:new ({
name = "chatcontainer", x = "-" .. tostring (moonlightUI.rightbar + 5), y = -355, width = moonlightUI.rightbar, height = 350, })
-- here's something to hold the names of chat containers moonlightUI.chatcontainers = {}
-- important part: function to create a new chat window moonlightUI.createchat = function (chatname, buttoncolor)
-- prepend 'ChatBox' to the name local chatboxname = "ChatBox" .. chatname -- save that name in the list of chat boxes moonlightUI.chatcontainers[#moonlightUI.chatcontainers+1] = chatboxname -- and make the chat box! moonlightUI[chatboxname] = Geyser.MiniConsole:new ({ name=chatboxname, -- we'll set it against the left, 30px from the top to give room for the tabs, -- and as wide as the chat container x = 0, y = 30, width = "100%", -- the height is set this way so it actually adheres to the height of the chat container -- if you just set 100% it actually overflows by an amount equal to the chatbox 'y' value height = tonumber((moonlightUI.chatcontainer.height:gsub("px",""))) - 30, }, moonlightUI.chatcontainer) -- set the buffer, wrap, and background color of the chatbox moonlightUI[chatboxname]:setBufferSize (500000, 100) local fontwidth, fontheight = calcFontSize (moonlightUI.fontsize) moonlightUI[chatboxname]:setWrap (math.floor (moonlightUI.rightbar/fontwidth)) moonlightUI[chatboxname]:setColor ("black") -- set the font size setMiniConsoleFontSize (chatboxname, moonlightUI.fontsize) -- prepend 'ChatButton' to the name local chatbuttonname = "ChatButton" .. chatname -- figure out where the button should sit local buttonstart = (#moonlightUI.chatcontainers - 1) * 47 -- and make the chat button! moonlightUI[chatbuttonname] = Geyser.Label:new ({ name = chatbuttonname, -- we'll offset the buttons so they don't overlap, and set them against the top x = buttonstart, y = 0, -- give it some space (needs to be udpated to dynamically scale) width = 45, height = 25, -- set the font to black fgColor = "black", -- and the background to the color they wanted! color = buttoncolor, -- oh, don't forget the text... message = [[<center>]] .. chatname .. [[</center>]] }, moonlightUI.chatcontainer) -- this is so when we click it... moonlightUI[chatbuttonname]:setClickCallback ("moonlightUI." .. chatbuttonname .. "_press") -- ...we call this function to switch chat windows! moonlightUI[chatbuttonname .. "_press"] = function () moonlightUI.chatpress (chatboxname) end -- func -- now, let's make a tiny tab to indicate which is current -- prepend 'CurrentTab' to the name local currenttabname = "CurrentTab" .. chatname -- now, let's make a tiny tab to indicate which is current -- and make the chat button! moonlightUI[currenttabname] = Geyser.Label:new ({ name = currenttabname, -- we'll offset the buttons so they don't overlap, and set them against the top x = buttonstart, y = 26, -- give it some space (needs to be udpated to dynamically scale) width = 45, height = 3, -- and the background to the color they wanted! color = buttoncolor, }, moonlightUI.chatcontainer)
end -- func
-- here's that function to switch chat windows moonlightUI.chatpress = function (chatname)
-- first, hide them all for k, v in ipairs (moonlightUI.chatcontainers) do moonlightUI[v]:hide () moonlightUI["CurrentTab" .. string.sub(v, 8)]:hide () end -- func -- then show the one we want moonlightUI[chatname]:show () moonlightUI["CurrentTab" .. string.sub(chatname, 8)]:show ()
end -- func
-- and another function to send chat to window moonlightUI.sendChat = function (chatwindow, fcolor, bcolor)
-- add a newline, to avoid overcrowding moonlightUI["ChatBox" .. chatwindow]:echo ("\n") -- and paste in the text! selectCurrentLine () -- set fcolor/bcolor 'or' to "nochange" to leave the colors as they are -- or set fcolor/bcolor 'or' to {r,g,b} to set your own defaults local fcolor = fcolor or "nochange" local bcolor = bcolor or "nochange" local _br,_bg,_bb = getBgColor () local _fr,_fg,_fb = getFgColor () if fcolor ~= "nochange" then setFgColor(fcolor[1],fcolor[2],fcolor[3]) end if bcolor ~= "nochange" then setBgColor(bcolor[1],bcolor[2],bcolor[3]) end copy () setBgColor(_br,_bg,_bb) setFgColor(_fr,_fg,_fb) appendBuffer ("ChatBox" .. chatwindow) appendBuffer ("ChatBoxAll") resetFormat ()
end -- func
moonlightUI.speak = function (chatwindow, text)
cecho ("ChatBox" .. chatwindow, text)
end -- func
-- finally, here we make some chat windows moonlightUI.createchat ("Public", "green") moonlightUI.createchat ("OOC", "white") moonlightUI.createchat ("LFG", "yellow") moonlightUI.createchat ("Other", "brown") moonlightUI.createchat ("Auction", "grey") moonlightUI.createchat ("Tick", "red") moonlightUI.createchat ("Combat", "orange")
-- this goes at the end to hide the chat windows for k, v in ipairs (moonlightUI.chatcontainers) do
moonlightUI[v]:hide () moonlightUI["CurrentTab" .. string.sub(v, 8)]:hide ()
end -- for -- then show the first one moonlightUI[moonlightUI.chatcontainers[1]]:show () moonlightUI["CurrentTab" .. string.sub(moonlightUI.chatcontainers[1], 8)]:show ()
-- the following comment is how to send a trigger match to the a window
-- moonlightUI.sendChat ("Public")
-- the following comment is how to send it with colors specified: foreground
-- is declared first, anything missing is assumed, and "nochange" means don't
-- change the colors
-- moonlightUI.sendChat ("Public", {255,255,255})
-- moonlightUI.sendChat ("Public", {255,255,255}, {0,0,0})
-- moonlightUI.sendChat ("Public", "nochange", {0,0,0})
-- the following comment is how to replace long text with a shorter version -- (this will replace it in the main window as well as the miniconsole) --[[ selectString("(this is a very long clan name)", 1) setBgColor(getBgColor()) setFgColor(getFgColor()) replace("(shortclanname)") resetFormat () --]]</script>
<eventHandlerList/> </Script> </ScriptPackage>
</MudletPackage>