mudgangster

Tiny, scriptable MUD client
Log | Files | Refs | README

action.lua (2212B)


      1 local Actions = { }
      2 local PreActions = { }
      3 local AnsiActions = { }
      4 local AnsiPreActions = { }
      5 
      6 local ChatActions = { }
      7 local ChatPreActions = { }
      8 local ChatAnsiActions = { }
      9 local ChatAnsiPreActions = { }
     10 
     11 local doActions
     12 local doPreActions
     13 local doAnsiActions
     14 local doAnsiPreActions
     15 
     16 local doChatActions
     17 local doChatPreActions
     18 local doChatAnsiActions
     19 local doChatAnsiPreActions
     20 
     21 local function genericActions( actions )
     22 	return
     23 		function( pattern, callback, disabled )
     24 			enforce( pattern, "pattern", "string" )
     25 			enforce( callback, "callback", "function", "string" )
     26 
     27 			if type( callback ) == "string" then
     28 				local command = callback
     29 
     30 				callback = function()
     31 					mud.input( command, true )
     32 				end
     33 			end
     34 
     35 			local action = {
     36 				pattern = pattern,
     37 				callback = callback,
     38 
     39 				enabled = not disabled,
     40 
     41 				enable = function( self )
     42 					self.enabled = true
     43 				end,
     44 				disable = function( self )
     45 					self.enabled = false
     46 				end,
     47 			}
     48 
     49 			table.insert( actions, action )
     50 
     51 			return action
     52 		end,
     53 
     54 		function( line )
     55 			for i = 1, #actions do
     56 				local action = actions[ i ]
     57 
     58 				if action.enabled then
     59 					local ok, err = xpcall( string.gsub, debug.traceback, line, action.pattern, action.callback )
     60 
     61 					if not ok then
     62 						mud.print( "\n#s> action callback failed: %s", err )
     63 					end
     64 				end
     65 			end
     66 		end
     67 end
     68 
     69 mud.action,        doActions        = genericActions( Actions )
     70 mud.preAction,     doPreActions     = genericActions( PreActions )
     71 mud.ansiAction,    doAnsiActions    = genericActions( AnsiActions )
     72 mud.ansiPreAction, doAnsiPreActions = genericActions( AnsiPreActions )
     73 
     74 mud.chatAction,        doChatActions        = genericActions( ChatActions )
     75 mud.preChatAction,     doChatPreActions     = genericActions( ChatPreActions )
     76 mud.ansiChatAction,    doChatAnsiActions    = genericActions( ChatAnsiActions )
     77 mud.ansiPreChatAction, doChatAnsiPreActions = genericActions( ChatAnsiPreActions )
     78 
     79 return {
     80 	doActions = doActions,
     81 	doPreActions = doPreActions,
     82 	doAnsiActions = doAnsiActions,
     83 	doAnsiPreActions = doAnsiPreActions,
     84 
     85 	doChatActions = doChatActions,
     86 	doChatPreActions = doChatPreActions,
     87 	doChatAnsiActions = doChatAnsiActions,
     88 	doChatAnsiPreActions = doChatAnsiPreActions,
     89 }